5

Sulla modifica dell'orientamento, viene ricreata l'attività e viene ricreata anche la finestra di dialogo Data/ora. Desidero salvare lo stato della finestra di dialogo Data e ora che è stata modificata dall'utente.Come mantenere lo stato della finestra di Data e ora sul cambio di orientamento?

Prima di disattivare la finestra di dialogo, desidero mantenere lo stato della finestra di dialogo Data/Ora.

Nota, posso chiudere la finestra di dialogo in onSaveInstanceState, dove è disponibile il pacchetto. Ma viene anche chiamato quando l'attività va in pausa, e in quel caso non voglio chiudere la finestra di dialogo. Quindi, ha deciso di eliminarlo sul metodo onDestroy, ma non ho l'oggetto bundle lì. Ecco perché sto affrontando questo problema. C'è un modo per accedere al bundle in onDestroy? O qualsiasi altro suggerimento per il mio problema sarebbe apprezzato.

@Override 
protected void onDestroy() { 
    if(dateTimeDialog !=null && dateTimeDialog.isShowing()) 
    { 
     //<HERE I WANT THE STATE TO BE SAVED IN THE BUNDLE> 
     dateTimeDialog.dismiss(); 
    } 
    super.onDestroy(); 
} 

Fondamentalmente abbiamo bloccare l'applicazione se l'utente si allontana dalla nostra applicazione, e sbloccare lo schermo e la finestra di dialogo che sta visualizzando sono ripresi. E se abbiamo chiuso la finestra di dialogo suSavedInstanceState, dopo aver sbloccato l'applicazione invoca onRestart, avvia e riprende i metodi, dove nessuno di questi ha l'istanza di Bundle fornita come parametro.

Inoltre, abbiamo layout separati per landscape & portrait a causa del quale non possiamo impostare configChanges = "orientation" nel file manifest.

+2

La classe 'DatePickerDialog' ha metodi' onSaveInstanceState() 'e' onRestoreInstanceState() '. –

risposta

0

È ancora possibile mantenere i vostri stati di dialogo in onSaveIsntanceState(), ma respingere solo la finestra di dialogo in onDestroy(), che dovrebbe soddisfare le vostre esigenze. Anche se non sono sicuro di cosa significherebbe un annullamento del dialogo in onDestroy().

+0

sì, è vero! e funziona bene ma volevo mantenere la finestra di dialogo dopo aver sbloccato il mio dispositivo e quando cancello la finestra di dialogo in onSaveInstanceState() viene anche chiamato quando l'attività va in pausa, e in quel caso non voglio chiudere la finestra di dialogo. Quindi, ha deciso di eliminarlo sul metodo onDestroy, ma non ho l'oggetto bundle lì. – AndroidGeeks

0

utilizzare la linea di seguito nel file manifesto nei tag actvity

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 

come

<application 
android:allowBackup="true" 
android:icon="@drawable/ic_launcher" 
android:label="@string/app_name" 
android:theme="@style/AppTheme" > 
<activity 
    android:name="com.example.demo.MainActivity" 
    android:label="@string/app_name" 
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

e sovrascrivere il metodo seguito nella vostra attività.

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    // TODO Auto-generated method stub 
    super.onConfigurationChanged(newConfig); 
} 

Non c'è bisogno di usare onSaveInstanceState() e onRestoreInstanceState()

Per favore fatemi sapere di stato dopo l'aggiunta di codice ablove

+0

Ho aggiornato la domanda e menzionato il motivo per cui non sto utilizzando i configChanges. – AndroidGeeks

Problemi correlati