2

在我的应用程序的主要部分,我一次打开了 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 杀死正在运行的进程)。

我已经尝试了一切来检测并解决这个问题,但事实证明,很难以编程方式区分旋转和退出进程后恢复的应用程序。处理显示和隐藏片段的生命周期的正确方法是什么?

4

1 回答 1

0

这可能会帮助你:https ://stackoverflow.com/a/13306633/969325

基本上你可以在你的活动中传递一个空包 super.onCreate(savedInstanceState); 或者仅在它们尚不存在时创建新片段。我怀疑这是你的问题。

于 2013-09-20T13:35:49.923 回答