碎片在后退按钮上重叠

raj*_*kar 8 android overlap overlapping android-fragments back-stack

我创建了3个片段(FragmentA,FragmentB,FragmentC)和一个MainActivity.每个片段中都有一个按钮,它将自己替换为FragmentC的下一个片段.

我正在替换FragmentA(with)FragmentB(然后是)FragmentC.

从FragmentA到FragmentB的事务使用以下函数

    @Override
    public void fragmentreplacewithbackstack(Fragment fragment, String tag) {

        FragmentManager fragmentManager=getSupportFragmentManager();
        FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.contner,fragment , tag);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();   
//      fragmentManager.executePendingTransactions();

    }
Run Code Online (Sandbox Code Playgroud)

从FragmentB到FragmentC的事务使用以下函数

public void fragmentreplace(Fragment fragment,String tag){
        FragmentManager fragmentManager=getSupportFragmentManager();
        FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.contner,fragment , tag);
        fragmentTransaction.commit();   

    }
Run Code Online (Sandbox Code Playgroud)

问题是当我从FragmentC按下按钮时,FragmentC和FragmentA相互重叠.

如下屏幕

Atu*_*lic 5

你需要将碎片C添加到backstack,如果你想从这里回到Fragment B.

因此,请将以下内容称为Fragment C.

 fragmentTransaction.addToBackStack(null);
Run Code Online (Sandbox Code Playgroud)

编辑 - 更改当前用于从B到C的方法,

public void fragmentreplace(Fragment fragment,String tag){
    FragmentManager fragmentManager=getSupportFragmentManager();
    FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.contner,fragment , tag);
    fragmentTransaction.addToBackStack(null); //this will add it to back stack
    fragmentTransaction.commit();   
}
Run Code Online (Sandbox Code Playgroud)

  • 我不想在堆栈中使用FragmentB.我希望我的事务直接从FragmentC使用backpress转到FragmentA (2认同)