在我的应用程序的主要部分,我一次打开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终止正在运行的进程来复制。)
我已经尝试了一切来检测这一点并解决了这个问题,但事实证明,在退出流程后,以编程方式区分轮换和正在恢复的应用程序非常困难。 处理显示和隐藏片段的生命周期的正确方法是什么?
答案 0 :(得分:0)
这可能有助于您:https://stackoverflow.com/a/13306633/969325
基本上你可以在你的活动中传递一个空包super.onCreate(savedInstanceState);或者仅在尚未存在时创建新片段。我怀疑那是你的问题。