【问题标题】:How to retained the state of datetime Dialog on orientation change?如何在方向更改时保留日期时间对话框的状态?
【发布时间】:2013-08-01 13:21:14
【问题描述】:

在方向更改时,将重新创建 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"。

【问题讨论】:

  • DatePickerDialog 类有 onSaveInstanceState()onRestoreInstanceState() 方法。

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


【解决方案1】:

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

【讨论】:

  • 是的,没错!并且工作正常,但我想在解锁设备后保留对话框,当我在 onSaveInstanceState() 中关闭对话框时,当活动进入暂停状态时也会调用它,在这种情况下,我不想关闭对话框。因此,决定在 onDestroy 方法上关闭它,但我没有 bundle 对象。
【解决方案2】:

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

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

【讨论】:

  • 我已经更新了问题并提到了我不使用 configChanges 的原因。
猜你喜欢
  • 2016-04-16
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
相关资源
最近更新 更多