5

W przypadku zmiany orientacji Aktywność zostanie odtworzona, a okno Data czasu również zostanie odtworzone. Chcę zapisać okno dialogowe State of Date Time, które zostało zmienione przez użytkownika.Jak zachować stan datetime Okno dialogowe dotyczące zmiany orientacji?

Zanim odłożę okno dialogowe, chcę zachować stan okna dialogowego Data.

Uwaga, mogę zamknąć okno dialogowe na stronieSaveInstanceState, gdzie mam dostępny pakiet. Ale jest również wywoływana, gdy działanie przechodzi w stan wstrzymania, i w tym przypadku nie chcę odrzucać okna dialogowego. Dlatego zdecydowałem się go odrzucić na metodzie onDestroy, ale nie mam tam obiektu pakietu. Dlatego właśnie stoję w obliczu tego problemu. Czy istnieje sposób dostępu do pakietu w OnDestroy? Albo inna sugestia dotycząca mojego problemu zostanie doceniona.

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

Zasadniczo możemy zablokować wniosek, jeśli użytkownik odejść od naszej aplikacji, a na odblokować ekran i dialogowe on ogląda zostają wznowione. A jeśli odrzuciliśmy okno dialogowe onSavedInstanceState, po odblokowaniu aplikacji wywoła on onRestart, uruchomi i wznowi metody, gdzie żaden z nich nie ma instancji Pakietu jako parametru.

Ponadto mamy oddzielne układy dla krajobrazu & portret, z powodu których nie możemy ustawić configChanges = "orientation" w pliku manifestu.

+2

'Klasa DatePickerDialog' zawiera metody' onSaveInstanceState() 'i' onRestoreInstanceState() '. –

Odpowiedz

0

Nadal można zachować Dialog stany w onSaveIsntanceState(), ale tylko zamknąć okno w onDestroy(), który powinien spełnić twoje wymagania. Chociaż nie jestem pewien, co by się stało, że okno dialogowe zwolnić w onDestroy() osiągnąć.

+0

tak, to prawda! i działa dobrze, ale chciałem zachować okno dialogowe po odblokowaniu mojego urządzenia i kiedy odrzuciłem okno dialogowe w onSaveInstanceState(), jest ono również wywoływane, gdy działanie przechodzi w stan wstrzymania, i w takim przypadku nie chcę odrzucać okna dialogowego. Dlatego zdecydowałem się go odrzucić na metodzie onDestroy, ale nie mam tam obiektu pakietu. – AndroidGeeks

0

użyć poniższego wiersza w pliku manifestu w tagach actvity

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

jak

<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> 

i zastąpić wybraną metodę w swojej działalności.

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

Nie ma potrzeby korzystania onSaveInstanceState() i onRestoreInstanceState()

Proszę dać mi znać stan po dodaniu kodu ablove

+0

Mam zaktualizowane pytanie i podając powód, dla którego nie używam configChanges. – AndroidGeeks