0

我遇到了一个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();

有任何想法吗?谢谢。

4

1 回答 1

1

但是当我按回时,最后,fragment2 没有出现

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

我在容器id1上只看到fragmtent1,但fragment2在后退堆栈中,因为下一次按下后退按钮没有效果fragment1仍然可见,

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

简单的解决方案:不要混合addreplace交易。replace到处使用。

于 2015-07-07T14:17:36.590 回答