从另一个活动返回后,DialogFragment消失了

时间:2014-10-29 14:14:54

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

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

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

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

使用以下命令在MainActivity中显示SettingsDialogFragment:

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

FragmentManageer使用以下方式获得MainActivity:

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

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

预期结果:用户应通过AccountsFragment在MainActivity上看到SettingsDialogFragment。 实际结果:用户通过AccountsFragment看到MainActivity(没有对话框!)

观察:

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

两个观察都告诉我们,如果系统重新创建MainActivity,那么它也会成功恢复对话框。

另外,我只在Android 4.2.1 / 4.2.2上重现。其他版本似乎没问题。

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

更新

刚才意识到我可以重现这个问题,即使没有开始其他活动!只需单击“主页”按钮,即可将应用程序转到后台,然后从最近的应用程序列表中选择应用程序,这样它就会显示回到前台。对话消失了。但如果我旋转设备,则会显示对话框。

1 个答案:

答案 0 :(得分: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