如何在方向更改时保留datetime对话框的状态?

时间:2013-08-01 13:21:14

标签: android android-activity android-dialog android-dialogfragment android-datepicker

在方向更改时,将重新创建活动并重新创建日期时间对话框。 我想保存用户已更改的日期时间对话框的状态。

在我关闭对话框之前,我想保留日期时间对话框的状态。

注意,我可以在onSaveInstanceState中关闭对话框,在那里我有可用的包。但是,当活动进入暂停状态时也会调用它,在这种情况下,我不想忽略该对话框。因此,决定在onDestroy方法上解除它,但我没有bundle对象。这就是我面临这个问题的原因。有没有办法在onDestroy中访问捆绑包?或者对我的问题的任何其他建议将不胜感激。

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

基本上,如果用户离开我们的应用程序,我们会锁定应用程序,并在解锁屏幕时恢复正在查看的对话框。如果我们关闭onSavedInstanceState上的对话框,在解锁应用程序之后它会调用onRestart,start和resume方法,其中没有一个方法提供Bundle实例作为参数。

此外,我们还有横向和横向布局。因为我们无法在清单文件中设置configChanges =“orientation”的肖像。

2 个答案:

答案 0 :(得分:0)

在actvity标签的清单文件中使用以下行

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

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

并覆盖您的活动中的方法下方。

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

无需使用onSaveInstanceState()和onRestoreInstanceState()

添加ablove代码后请告知我状态

答案 1 :(得分:0)

您仍然可以在onSaveIsntanceState()中保留对话状态,但只会忽略onDestroy()中符合您要求的对话框。虽然我不确定在onDestroy()完成对话解雇是什么。