在我的应用程序的主要部分,我一次打开了 2 个片段。但是一次只显示一个。
第二个片段是从第一个片段的 onCreateView 方法创建的,因为第二个片段用于控制第一个片段。
Bundle args = new Bundle();
args.putInt(ReferenceSelectorFragment.ARG_TAB_INDEX, Tab.BOOK.position);
mReferenceSelectorFragment.setArguments(args);
fm.beginTransaction()
.add(container.getId(), mReferenceSelectorFragment, FRAGMENT_TAGS[0])
.hide(mReferenceSelectorFragment)
.commit();
我正在使用片段事务正确隐藏和显示片段:
getActivity().getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.up_in, R.anim.up_out, R.anim.down_in, R.anim.down_out)
.hide(ReaderFragment.this)
.show(mReferenceSelectorFragment)
.addToBackStack(null)
.commit();
正如预期的那样,这非常有效,除了一个小缺陷。当应用程序被最小化一段时间并且操作系统关闭进程时,当再次打开应用程序时,试图恢复以前的状态,两个片段都恢复到彼此之上。这意味着两者同时被看到在彼此之上。(这可以通过按下应用程序上的主页按钮来复制,然后使用 DDMS 杀死正在运行的进程)。
我已经尝试了一切来检测并解决这个问题,但事实证明,很难以编程方式区分旋转和退出进程后恢复的应用程序。处理显示和隐藏片段的生命周期的正确方法是什么?