2011-10-01 17 views
20

Secondo la documentazione,Usi il metodo onPostCreate()?

Chiamato quando l'attività di start-up è completa (dopo onStart() e onRestoreInstanceState (Bundle) sono stati chiamati). Le applicazioni saranno in genere non implementare questo metodo; è inteso per le classi di sistema per eseguire l'inizializzazione finale dopo l'esecuzione del codice dell'applicazione.

Le classi derivate devono richiamare l'implementazione della classe super di questo metodo. In caso contrario, verrà generata un'eccezione.

Non è consigliabile utilizzare questo metodo. Tuttavia, lo uso per modificare alcuni elementi dopo lo onCreate. Vedo che alcune persone lo usano per fare qualcosa tra onResume() e si consiglia di non farlo in quanto non possono fare affidamento su questo metodo (a causa della sua cattiva documentazione).

Quindi, posso utilizzare il tweaking qui (non si basa su onResume affatto)?
Usi mai questo metodo e quando/perché?

+1

Sono davvero l'unico che usa questo metodo ??? – sandalone

risposta

12

Come afferma la documentazione, onPostCreate è principalmente destinato all'uso quadro. La domanda è: cosa intendi fare in onPostCreate() che non puoi fare in onCreate() o onResume() (cioè, che cosa significa esattamente "modificare alcuni elementi")?

Non lo uso, poiché non vedo alcun motivo per farlo: tutto ciò che devo fare può essere fatto in onCreate o onResume. Ad ogni modo, Google stesso lo usa nel suo TabActivity per esempio.

+0

hai ragione. perché usarlo quando posso usare onStart o onResume. Grazie – sandalone

+0

Felice di poter aiutare :) – AgentKnopf

+0

Devo usarlo per evitare Illegalstateexception. Sto usando FragmentTabHost in appcompatactivity e lancia un errore quando inizializzo FragmentTabhost in onCreate e premo il tasto home prima che il carico di attività sia completato. – WonderSoftwares

42

onPostCreate può essere utile se si sta realizzando la propria estensione "super-classe" di Attività con funzionalità condivise da tutte le attività.

utilizzando onPostCreate come metodo di richiamata dalla sottoclasse 'onCreate notificherà che tutta la creazione è terminata. Esempio: se si dispone di attività che condividono lo stesso layout, quindi è possibile utilizzare l'onPostCreate per aggiungere onClickListeners ecc

Se stai facendo override onPostCreate, è meglio per effettuare la chiamata al super.onPostCreate alla fine della vostra implementazione.

+1

Ecco come lo uso in combinazione con Butterknife per iniettare tutti i miei punti di vista, è molto utile. – bclymer

+0

Che dire del chiamare '' super.onCreate() '' nei metodi sovrascritti onCreate e quindi collegare gli ascoltatori? Da http://developer.android.com/reference/android/app/Activity.html#onPostCreate(android.os.Bundle): Le applicazioni generalmente non implementano questo metodo; è inteso per le classi di sistema per eseguire l'inizializzazione finale dopo l'esecuzione del codice dell'applicazione. –

+0

Migliore spiegazione. ... grazie @ user1419056 – Kushal

14

Google utilizza onPostCreate() nel loro progetto di esempio per Navigation Drawer. ActionBarDrawerToggle ha bisogno di sincronizzare dopo il cambio di orientamento consente di dire :)

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 

    // Sync the toggle state after onRestoreInstanceState has occurred. 
    mDrawerToggle.syncState(); 
} 

Quindi penso onPostCreate() dovrebbe essere utilizzato solo in alcune situazioni specifiche ...

1

Io uso onPostCreate() quando ho bisogno di cambiare il guarda a livello di programmazione Perché chiamare findViewById() non funziona quando utilizzo in onCreate.

+1

Desidero brevemente commentare questo aspetto: poiché sei incoraggiato a usare Fragments per disporre la tua interfaccia utente, puoi semplicemente usare il metodo onViewCreated di Fragment per aggiornare la tua post-creazione. In alternativa potresti persino farlo suCreateView - dove la vista è effettivamente creata/gonfiata. – AgentKnopf

1

Potrebbero esserci situazioni in cui sarà necessario utilizzarlo. specialmente con le API più recenti.

Uno scenario che potrebbe essere utile durante il cambio di rotazione o lo stato di ritorno a un'attività che ha una barra di avanzamento all'interno della barra delle azioni. è necessario impostarla falso interno onPostCreate()

@Override 
protected void onPostCreate(Bundle savedInstanceState) 
{ 
     super.onPostCreate(savedInstanceState); 
     setProgressBarIndeterminateVisibility(false); 
} 
0

Dal momento che nessuna delle risposte ha fatto un punto sulla onRestoreInstanceState (Bundle), voglio fare un punto qui. Questo metodo verrà chiamato, se un'app viene rimossa forzatamente dalla memoria e quindi riavviata dall'utente. In modo che possiamo utilizzare questo metodo per mantenere lo stato di attività, Incase se l'utente ha rimosso in precedenza l'app con forza dalla memoria.

0

In base al nome dell'evento "Post", lo utilizzo sempre per verificare che la dimensione degli elementi possa essere modificata durante onCreated, in particolare mentre gli elementi o i layout devono essere modificati dopo la rotazione dello schermo.

7

Si tratta di un'estensione per la seconda risposta:

Immaginate che si sta cercando di implementare BaseActivity che non fissa alcun layout in metodo OnCreate.

public abstract class BaseActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
    } 
} 

Poi immaginate di avere qualche altra attività (estende la BaseActivity), che stabilisce alcune di layout:

public class MainActivity extends BaseActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
} 

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<Button 
    android:id="@+id/my_btn" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 
</LinearLayout> 

Così la la prima volta quando si è possibile utilizzare il pulsante in BaseActivity è il metodo onPostCreate:

public abstract class BaseActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     Button btn = (Button) findViewById(R.id.myBtn); //this is the when you can initialise your button 

    } 

} 

L'uso di BaseActivity è una pratica comune nella creazione di app buone!

0

ha appena chiamato dopo onCreate, poiché il mio programma non è molto complesso, funziona bene. È utile fare qualcosa in comune nella classe base dopo che la classe figlia ha gonfiato il suo layout