2011-12-15 17 views
34

Ho 2 attività: la prima attività dell'utente fa clic su un pulsante che avvia la 2a attività. La 2a attività fa tutto il lavoro.onCreate non chiamato

Avvio la 2a attività come segue all'interno di una classe interna onClickListener e ho provato a chiamarla esplicitamente con (FirstActivity.this, Simple.Class) ma succede la stessa cosa.

Intent test = new Intent(arg0.getContext(),Simple.class); 
    startActivity(test); 

sull'emulatore, vedo lo schermo si muove su come il suo chiamando il 2 ° attività, ma tutto quello che ottiene è uno schermo nero, ma nulla viene caricato dal mio layout. Ho guardato logcat e vedo alcuni messaggi falliti nel thread del raccoglitore. Questa è la funzione onCreate dalla mia seconda attività, ma non ottengo alcun risultato sia da schermo o logcat mi dimostrano che le funzioni di protocollo sono stati chiamati:

public void onCreate(Bundle savedState) 
    { 
     Log.d("SimpleActivity","OnCreate Started"); 

     super.onCreate(savedState); 
    setContentView(R.layout.simple); 

     Log.d("SimpleActivity","OnCreate Ended"); 
    } 

Nota: ho chiamato il costruttore di base in OnCreate() con super.onCreate (savedState) nel mio codice sopra.

+0

post di qualche altro del codice in modo che possiamo vedere ciò che è arg0. Probabilmente non dovresti usare quello che è. Usa YourActivity.questo come il contesto da passare a nuovi intenti. – FoamyGuy

+0

Hai risolto questo? Hai un frammento all'interno della vista che viene istanziato direttamente? –

risposta

123

Quello che è successo a me era che stavo override del metodo sbagliato onCreate. Stavo ignorando lo public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) quando avevo davvero bisogno di scavalcare lo protected void onCreate(@Nullable Bundle savedInstanceState). Forse questo potrebbe aiutare qualcuno!

+13

Grazie, è stato davvero così! – mrpeardotnet

+11

3 anni ancora facendo errori stupidi ..: D –

+1

Questo insetto stupido mi ha preso almeno un'ora per trovare ... Accidenti a te, 'vuoto pubblico onCreate'! –

0

si dovrebbe @Override onCreate e aggiungere super.onCreate() in esso

@Override 
public void onCreate(Bundle savedState) 
{ 
    super.onCreate(savedState); 

    Log.d("SimpleActivity","OnCreate Started"); 
    setContentView(R.layout.simple); 
    Log.d("SimpleActivity","OnCreate Ended"); 
} 
+5

Nel tuo esempio di codice dice due volte "super.onCreate (savedState);" ora .. –

0

È necessario chiamare il metodo super.onCreate(savedState). Dai uno sguardo allo Activity doc.

public void onCreate(Bundle savedState) 
    { 
    super.onCreate(savedState); 
    } 
1

È possibile che onCreate non viene chiamato, se l'attività non è mai stata distrutta, se per qualche motivo un'attività si aggira, la prossima volta la sua un'istanza non viene ricreata, ma riprende invece ...

Almeno questo è quello che sto facendo adesso nel mio codice ... Il ciclo di vita delle attività sembra una buona spiegazione logica .. Comunque il 99% delle volte faccio affidamento sul fatto che onCreate venga chiamato all'avvioActivity e non mi mancherà ....

Modifica: E ovviamente è perché non stavo chiamando finish() quando si esce dall'acti VITY. Doh.

+0

Questa risposta mi dà un indizio per risolvere il mio problema. Nel mio caso, l'attività termina su una condizione di un flag di oggetto e questo viene inserito nel codice eseguibile del gestore. Ma questo oggetto diventa null prima dell'esecuzione del runnable. Grazie per quello. – jrhamza

0

Questo non è legata a questo certo problema, ma anche questo può accadere quando l'attività non è dichiarata nel file manifesto)

0

stare attenti che se il metodo appartiene a AppCompatActivity o attività.

Spetta a quello che è stato implementato alla classe

Se si desidera aggiungere del ciclo di vita o di sostituire i metodi, vi consiglio di premere CTRL+O o fare Code > Override methods e lì si può vedere dove il metodo appartiene

Screenshot for illustrative purposes - Android Studio's "Methods to Override" dialog

Problemi correlati