【发布时间】:2013-07-20 05:04:17
【问题描述】:
在我的应用程序的主要部分,我一次打开了 2 个片段。但是一次只显示一个。
第二个 Fragment 是从第一个 Fragment 的 onCreateView 方法创建的,因为第二个 Fragment 用于控制第一个 Fragment。
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 终止正在运行的进程来复制)。
我已尽一切努力检测并修复此问题,但事实证明,以编程方式区分旋转和退出进程后正在恢复的应用程序非常困难。 处理显示和隐藏片段的生命周期的正确方法是什么?
【问题讨论】:
标签: android android-fragments android-fragmentactivity android-lifecycle