【问题标题】:Proper way to handle the lifecycle of showing and hiding fragments?处理显示和隐藏片段生命周期的正确方法?
【发布时间】: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


    【解决方案1】:

    这可能会对您有所帮助:https://stackoverflow.com/a/13306633/969325

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

    【讨论】:

      猜你喜欢
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多