【问题标题】:DialogFragment is gone after returning back from another activity从另一个活动返回后,DialogFragment 消失了
【发布时间】:2014-10-29 14:14:54
【问题描述】:

有很多问题都在讨论 DialogFragment 在设备旋转时消失的问题。但我有一个相反的。我必须旋转设备才能强制显示对话框。

我正在使用 android-support-v4.jar 库。

我有 MainActivity (android.support.v4.app.FragmentActivity) 和 AccountsFragment (android.support.v4.app.Fragment)。 通过菜单项,用户触发显示 SettingsDialogFragment (android.support.v4.app.DialogFragment)。

SettingsDialogFragment 在 MainActivity 中显示,使用:

android.support.v4.app.DialogFragment.show(FragmentManager manager, String tag)

FragmentManager 是通过 MainActivity 获取的:

android.support.v4.app.FragmentActivity.getSupportFragmentManager()

用户单击 SettingsDialogFragment 上的按钮,触发显示 PasslockSetupActivity (android.support.v4.app.FragmentActivity)。 用户完成密码锁设置,我们调用 PasslockSetupActivity.finish()。

预期结果:用户应该看到 SettingsDialogFragment 而不是 MainActivity 和 AccountsFragment。 实际结果:用户看到 MainActivity 和 AccountsFragment(没有对话框!)

观察:

  • 如果在设备上启用了“不保留活动”开发者选项,则它会按预期工作。
  • 如果用户旋转设备,则会出现对话框!

这两个观察结果都表明,如果系统重新创建 MainActivity,那么它也会成功恢复对话框。

另外,我只在 Android 4.2.1/4.2.2 上重现。其他版本好像还可以。

有人遇到过这样的问题吗?有什么想法吗?

更新:

刚刚意识到我可以重现该问题即使不开始其他活动!单击主页按钮就足够了,因此应用程序转到后台,然后从最近的应用程序列表中选择应用程序,因此它又回到前台。对话框不见了。但是如果我旋转设备,就会显示对话框。

【问题讨论】:

    标签: android android-fragments dialog android-support-library


    【解决方案1】:

    DialogFragment displayed from onContextItemSelected doesn't survive onPause/onResume 的解决方案帮助了我。

    new Handler().postDelayed(new Runnable() {
        public void run() {
            showMyDialogFragment();
        }
    }, 300);
    

    但是 300 毫秒对我来说并不可靠,所以我使用了 500 毫秒。

    看起来这个问题有一个官方问题 - https://code.google.com/p/android/issues/detail?id=41901

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多