有许多问题讨论了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上重现。其他版本似乎没问题。
有没有人遇到过这样的问题?有什么想法吗?
更新
刚才意识到我可以重现这个问题,即使没有开始其他活动!只需单击“主页”按钮,即可将应用程序转到后台,然后从最近的应用程序列表中选择应用程序,这样它就会显示回到前台。对话消失了。但如果我旋转设备,则会显示对话框。
答案 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