在方向更改时,将重新创建"活动",并重新创建"日期-时间"对话框。我想保存用户已更改的"日期-时间"对话框的状态。
在关闭对话框之前,我希望保留"日期-时间"对话框的状态。
注意,我可以在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
请让我知道添加活动代码后的状态