如何在方向更改时保留日期时间对话框的状态



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

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

注意,我可以在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"。

您仍然可以在onSaveIsntanceState()中保留对话框状态,但只能在onDestroy()中取消对话框,这应该满足您的要求。虽然我不确定在onDestroy()中的对话框取消会实现什么。

在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

请让我知道添加活动代码后的状态

最新更新