5

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

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

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

4

2 回答 2

0

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

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代码后请告诉我状态

于 2013-08-02T04:50:24.973 回答
0

您仍然可以在 中保留对话框状态onSaveIsntanceState(),但只能在 中关闭对话框onDestroy(),这应该满足您的要求。虽然我不确定对话解除会onDestroy()完成什么。

于 2013-08-02T06:51:13.723 回答