Come utilizzare onSaveInstanceState () e onRestoreInstanceState ()?

Sto cercando di salvare i dati attraverso i cambiamenti di orientamento. Come dimostrato nel codice riportto di seguito, utilizzo onSaveInstanceState() e onRestoreInstanceState() . Cerco di get il valore salvato e controllo se è il valore corretto in onRestoreInstanceState() . Ma quando cerco di utilizzare il nuovo valore in onCreate() , non ho il nuovo valore ma quello vecchio.

 protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("TEXT", user); } protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); savedUser = savedInstanceState.getString("TEXT"); Log.d("enregistred value", savedUser); } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int display_mode = getResources().getConfiguration().orientation; if (display_mode == 1) { setContentView(R.layout.main_grid); mGrid = (GridView) findViewById(R.id.gridview); mGrid.setColumnWidth(95); mGrid.setVisibility(0x00000000); // mGrid.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); } else { setContentView(R.layout.main_grid_land); mGrid = (GridView) findViewById(R.id.gridview); mGrid.setColumnWidth(95); Log.d("Mode", "land"); // mGrid.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); } Log.d("savedUser", savedUser); if (savedUser.equals("admin")) { //value 0 adapter.setApps(appManager.getApplications()); } else if (savedUser.equals("prof")) { //value 1 adapter.setApps(appManager.getTeacherApplications()); } else {// default value appManager = new ApplicationManager(this, getPackageManager()); appManager.loadApplications(true); bindApplications(); } } 

  • Determinare la velocità di un veicolo con GPS in android
  • Gli events di touch del browser Android arrestano la visualizzazione che viene aggiornata inc. canvas / elementi - Come funziona?
  • Anteprima della camera Android su SurfaceTexture
  • Rimozione dell'imbottitura dal button di scorrimento in Android
  • Android / SQLite: Inserisci-Aggiorna le colonne di tabella per mantenere l'identificatore
  • Intent.ACTION_PICK restituisce il cursore vuoto per alcuni contatti
  • 3 Solutions collect form web for “Come utilizzare onSaveInstanceState () e onRestoreInstanceState ()?”

    Quando la tua attività viene ricreata dopo essere stata precedentemente distrutta, puoi recuperare il tuo stato salvato dal Bundle che il sistema passa all'attività. Sia i methods callback onCreate () e onRestoreInstanceState () riceveranno lo stesso bundle che contiene le informazioni sullo stato di istanza.

    Poiché il metodo onCreate () viene chiamato se il sistema sta creando una nuova istanza della propria attività o ricreando una precedente, è necessario verificare se il Bundle di stato è nullo prima di tentare di leggerlo. Se è nullo, il sistema sta creando una nuova istanza dell'attività, invece di ripristinare un precedente che è stato distrutto.

     static final String STATE_USER = "user"; private String mUser; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Check whether we're recreating a previously destroyed instance if (savedInstanceState != null) { // Restore value of members from saved state mUser = savedInstanceState.getString(STATE_USER); } else { // Probably initialize members with default values for a new instance mUser = "NewUser"; } } @Override public void onSaveInstanceState(Bundle savedInstanceState) { savedInstanceState.putString(STATE_USER, mUser); // Always call the superclass so it can save the view hierarchy state super.onSaveInstanceState(savedInstanceState); } 

    http://developer.android.com/training/basics/activity-lifecycle/recreating.html

    • onSaveInstanceState() è un metodo utilizzato per memorizzare i dati prima di interrompere l'attività.

    Descrizione: Gancio che consente una visualizzazione per generare una rappresentazione dello stato interno che può essere utilizzato per creare una nuova istanza con lo stesso stato. Questo stato dovrebbe contenere solo informazioni che non sono persistenti o non possono essere successivamente ricostruite. Ad esempio, non memorizzerai mai la posizione corrente sullo schermo perché verrà calcasting di nuovo quando una nuova istanza della vista viene inserita nella sua gerarchia di visualizzazione.

    • onRestoreInstanceState() è un metodo utilizzato per recuperare tali dati.

    Descrizione: Questo metodo viene chiamato dopo onStart () quando l'attività viene reinizializzata da uno stato precedentemente salvato, dato qui in saveInstanceState. La maggior parte delle implementazioni utilizzerà semplicemente onCreate (Bundle) per ripristinare lo stato, ma a volte è conveniente farlo qui dopo che sia stata eseguita l'initialization o per consentire alle sottoclassi di decidere se utilizzare l'implementazione predefinita. L'implementazione predefinita di questo metodo esegue un ripristino di qualsiasi stato di visualizzazione precedentemente bloccato da onSaveInstanceState (Bundle).

    Consideriamo qui l'esempio:
    L'app dispone di 3 caselle di modifica in cui l'utente stava mettendo in alcune informazioni, ma ottiene una chiamata, quindi se non si utilizzano i methods di cui sopra, ciò che ha inserito sarà perso.
    Quindi salvare sempre il metodo onPause() di Activity come un bundle e in metodo onResume() call il metodo onRestoreInstanceState() .

    Perfavore guarda :

    Come utilizzare l'esempio suSavedInstanceState per favore

    http://www.how-to-develop-android-apps.com/tag/onrestoreinstancestate/

    Ciò accade perché si utilizza il valore savedValue nel metodo onCreate() . Il valore savedValue viene aggiornato in metodo onRestoreInstanceState() , ma onRestoreInstanceState() viene chiamato dopo il metodo onCreate() . È ansible:

    1. Aggiorna il savedValue su onCreate() o
    2. Spostare il codice che utilizza il nuovo valore savedValue in onRestoreInstanceState() metodo onRestoreInstanceState() .

    Ma ti suggerisco di utilizzare il primo approccio, facendo così il codice:

     public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int display_mode = getResources().getConfiguration().orientation; if (display_mode == 1) { setContentView(R.layout.main_grid); mGrid = (GridView) findViewById(R.id.gridview); mGrid.setColumnWidth(95); mGrid.setVisibility(0x00000000); // mGrid.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); } else { setContentView(R.layout.main_grid_land); mGrid = (GridView) findViewById(R.id.gridview); mGrid.setColumnWidth(95); Log.d("Mode", "land"); // mGrid.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); } if (savedInstanceState != null) { savedUser = savedInstanceState.getString("TEXT"); } else { savedUser = "" } Log.d("savedUser", savedUser); if (savedUser.equals("admin")) { //value 0 adapter.setApps(appManager.getApplications()); } else if (savedUser.equals("prof")) { //value 1 adapter.setApps(appManager.getTeacherApplications()); } else {// default value appManager = new ApplicationManager(this, getPackageManager()); appManager.loadApplications(true); bindApplications(); } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.