【问题标题】:Strange Fragments backstack behavior奇怪的片段回栈行为
【发布时间】:2015-07-06 14:20:34
【问题描述】:

我使用一个activity 和所有基于Fragments 的导航的应用程序。我有一个地方包含后续步骤:

fragment1 在容器 id1 中被替换; 我使用add 将fragment2 添加到同一个id1 容器中; 在我使用 replace 将 fragment3 添加到同一个 id1 容器之后;

这是三个不设防的交易。所有都添加到后堆栈。但是当我按下后退时,最后没有出现fragment2,我在容器id1上只看到fragmtent1,但fragment2在后退堆栈中,因为下一次按下后退按钮没有效果fragment1仍然可见,下一次按下后退按钮后fragment1将被删除来自容器。

看起来第一次按下后退按钮 fragment2 后没有创建它的视图,所以他正在容器上消失。

有一部分代码是我用来替换的:

FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.kp_content_frame, fragment);

    if (addToBackStack) {
        transaction.addToBackStack(fragment.getTag());
    }
    if (allowingStateLoss) {
        transaction.commitAllowingStateLoss();
    } else {
        transaction.commit();
    }

添加:

final String tagToAdd = fragment instanceof BaseFragment ? ((BaseFragment) fragment).getCustomTag() : fragment.toString();

        if(isDuplicateFragment(tagToAdd)) {
            return;
        }

        FragmentTransaction transaction = fragmentManager.beginTransaction();

        if (enterPopAnim != 0 || exitPopAnim != 0) {
            transaction.setCustomAnimations(enterAnim, exitAnim, enterPopAnim, exitPopAnim);
        } else if(enterAnim != 0 || exitAnim != 0) {
            transaction.setCustomAnimations(enterAnim, exitAnim);
        }

        transaction.add(R.id.kp_content_frame, fragment, tagToAdd);

        if (addToBackStack) {
            transaction.addToBackStack(tagToAdd);
        }
        transaction.commit();

有什么想法吗?谢谢。

【问题讨论】:

    标签: android android-fragments fragment-backstack


    【解决方案1】:

    但是当我按回时,在last之后,fragment2没有出现

    因为你在容器 id1 中有两个片段。而且fragment1在fragment2之上。

    我在容器id1上只看到fragmtent1,但是fragment2在back stack中,因为下一次按下返回按钮没有效果fragment1仍然可见,

    因为下一次按下后退按钮删除了不可见的片段2。

    简单的解决方案:不要混用 addreplace 事务。在任何地方使用replace

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多