从上一个片段返回时如何避免活动空白

时间:2020-02-05 08:26:43

标签: android android-fragments fragment

我正在使用

public void replaceFragment(Fragment fragment, boolean isMainPage, Bundle bundle) {
    String backStateName = fragment.getClass().getName();
    FragmentManager manager = getSupportFragmentManager();
    boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);

    if (bundle != null) {
        fragment.setArguments(bundle);
    }

    System.out.println("isMainPage :: " + isMainPage);
    System.out.println("FRAGMENT NAME :: " + backStateName + " fragmentPopped :: " + fragmentPopped);

    if (!fragmentPopped) { //fragment not in back stack, create it.
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.replace(R.id.main_fragment, fragment);

        if (isMainPage) {
            getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

        }
        int backStackCount = getSupportFragmentManager().getBackStackEntryCount();
        System.out.println("backStackCount :: " + backStackCount);
        transaction.addToBackStack(backStateName);
        transaction.commit();
    }
}

用于替换整个项目中的片段。我的问题是,当我从最后一个片段弹出时,它会显示空白页面,该页面放置了我的框架布局以替换片段

<FrameLayout
    android:id="@+id/main_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

1 个答案:

答案 0 :(得分:1)

只需从您的代码中删除此行,即可解决您的问题。

transaction.addToBackStack(backStateName);

说明

您已将片段添加到堆栈中,以便首先返回片段,该片段从后堆栈弹出,并且可以看到空容器。

注意:如果您想为片段指定标签名称,则只需用此transaction.replace(R.id.main_fragment, fragment);替换此行代码transaction.replace(R.id.main_fragment, fragment, backStateName);