DialogFramgment出现问题(在多个Android 4.2 / 4.4设备上支持v4 lib)。
我有两个DialogFragments:EditAccountDialogFragment和ErrorDialogFragment。
EditAccountDialogFragment是带有提交按钮的表单。当单击提交按钮并且没有网络连接时,我不会关闭EditAccountDialogFragment,而是在EditAccountDialogFragment上方显示ErrorDialogFragment。
由于某些原因,设备旋转后,对话框中对话框的顺序会更改。
轮换之前:
ErrorDialogFragment(正确位置)
EditAccountDialogFragment
MainActivity(具有全屏AccountsFragment)
旋转后:
EditAccountDialogFragment
ErrorDialogFragment(现在被遮盖,位置错误)
MainActivity(具有全屏AccountsFragment)
LogCat输出:
09-30 14:01:09.566: D/EditAccountDialogFragment(29054): onAttach
09-30 14:01:09.569: D/EditAccountDialogFragment(29054): onCreate
09-30 14:01:09.702: D/EditAccountDialogFragment(29054): onStart
CLICK SUBMIT BUTTON
09-30 14:01:12.531: D/TaskFragment(29054): handleTaskResult: Result [data=null, error=com.....Exception, errorType = NO_NETWORK, success=false]
09-30 14:01:12.543: D/ErrorDialogFragment(29054): onAttach
09-30 14:01:12.543: D/ErrorDialogFragment(29054): onCreate
09-30 14:01:12.564: D/ErrorDialogFragment(29054): onStart
ROTATE DEVICE
09-30 14:01:15.575: I/MainActivity(29054): onPause
09-30 14:01:15.583: D/MainActivity(29054): onSaveInstanceState
09-30 14:01:15.586: I/MainActivity(29054): onStop
09-30 14:01:15.586: D/ErrorDialogFragment(29054): onStop
09-30 14:01:15.587: D/EditAccountDialogFragment(29054): onStop
09-30 14:01:15.589: I/MainActivity(29054): onDestroy
09-30 14:01:15.595: D/AccountsFragment(29054): onDestroy
09-30 14:01:15.595: D/AccountsFragment(29054): onDetach
09-30 14:01:15.664: D/ErrorDialogFragment(29054): onDestroy
09-30 14:01:15.664: D/ErrorDialogFragment(29054): onDetach
09-30 14:01:15.680: D/EditAccountDialogFragment(29054): onDestroy
09-30 14:01:15.680: D/EditAccountDialogFragment(29054): onDetach
RESTORING ACTIVITY AND FRAGMENTS
09-30 14:01:15.695: I/MainActivity(29054): onCreate: clean start = false
09-30 14:01:15.695: D/AccountsFragment(29054): onAttach
09-30 14:01:15.695: D/AccountsFragment(29054): onCreate
09-30 14:01:15.707: D/ErrorDialogFragment(29054): onAttach
09-30 14:01:15.707: D/ErrorDialogFragment(29054): onCreate
09-30 14:01:15.710: D/EditAccountDialogFragment(29054): onAttach
09-30 14:01:15.710: D/EditAccountDialogFragment(29054): onCreate
09-30 14:01:15.756: I/MainActivity(29054): onStart
09-30 14:01:15.817: D/ErrorDialogFragment(29054): onStart
09-30 14:01:15.817: D/EditAccountDialogFragment(29054): onStart
09-30 14:01:15.819: I/MainActivity(29054): onResume
重现性约为50-60%。因此,这似乎是疯狂的计时问题之一。
到目前为止,我已经尝试过,但是没有成功:
试图查看跟踪类似问题的Android问题
尝试使用最新的支持v4 lib jar
尝试使用
Handler.post(Runnable r)
和Handler.postDelayed(Runnable r, long delayMillis)
显示ErrorDialogFragment该应用程序大量使用这种UX模式,即在一个对话框之上显示一个对话框,因此我可以在其他用户流程中重现该问题。是的,我知道这种UX模式不正确,并且编辑表单片段不应是对话框,而应是普通的全屏片段。但由于商业原因,我无法更改。
有没有人遇到这样的问题?有任何想法吗?
最佳答案
显示第二个对话框时,尝试使用第一个对话框的ChildFragmentManager:
...
EditAccountDialogFragment editAccountDialogFragment = ...
...
FragmentManager childFragmentManager = editAccountDialogFragment.getChildFragmentManager();
new ErrorDialogFragment().show(childFragmentManager, null);
...
在这种情况下,ErrorDialogFragment将仅在还原EditAccountDialogFragment后恢复并显示。