DialogFragments在设备旋转后重新排序
问题描述:
DialogFramgment存在问题(在多个Android 4.2/4.4设备上支持v4 lib)。DialogFragments在设备旋转后重新排序
我有两个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罐子
- 试图显示ErrorDialogFragment使用
Handler.post(Runnable r)
和Handler.postDelayed(Runnable r, long delayMillis)
应用大量使用具有上述另一个对话的这个UX图案,所以可REPR解决与其他用户流的问题。是的,我知道这样的UX模式并不好,编辑表单片段不应该是对话框,而应该是一个普通的全屏片段。但由于商业原因我无法改变。
有没有人遇到过这样的问题?有任何想法吗?
答
尝试,当你表现出第二个使用第一个对话框的ChildFragmentManager:
...
EditAccountDialogFragment editAccountDialogFragment = ...
...
FragmentManager childFragmentManager = editAccountDialogFragment.getChildFragmentManager();
new ErrorDialogFragment().show(childFragmentManager, null);
...
在这种情况下ErrorDialogFragment只会恢复EditAccountDialogFragment后可以恢复并显示。