按下后退按钮后片段重叠

时间:2019-04-17 03:58:45

标签: android android-fragments

我有三个片段(片段A,片段B,片段C)。代码从fragmentA到fragmentB,然后从fragmentB到FragemntC。

当我按下“后退”按钮时,我从fragmentC转到fragmentA。

按下后退按钮后,将显示fragmentA,但您也可以在其后面看到fragmentC。

片段A

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction;

ft.repalce(R.id.container, fragmentB)
  .addToBackStack("Null")  
  .commit();

片段B

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction;

ft.repalce(R.id.container, fragmentC)
  .commit();

片段C

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction;

ft.repalce(R.id.container, fragmentC)
  .commit();

按下后退按钮时,我想从fragmentC转到fragmentA,并且后台不显示片段C

3 个答案:

答案 0 :(得分:1)

在addToBackStack中,将null用作参数,而不是“ Null”

FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction;

    ft.repalce(R.id.container, fragmentB)
      .addToBackStack(null)  
      .commit();

答案 1 :(得分:0)

您可以在替换片段时尝试

Fragment frag=null;
frag=new Navigation_Help();
if(frag!=null){
        FragmentManager fragmentManager=getSupportFragmentManager();
        FragmentTransaction ft=fragmentManager.beginTransaction();
        ft.replace(R.id.sacreenarea,frag);
        //for not to back previous fragment remove next nile
        ft.addToBackStack(null);
        ft.commit();
    }

答案 2 :(得分:0)

我尝试使用@ADM重复链接,它将带我到片段A,但是如果我第二次加载片段B,则会出现两次提交错误。

对我有用的解决方案是使用@Override onBackPressed()重新启动活动,这将默认重新加载fragmentA。

片段B

FragmentManger fm = fragmentManager();
FragmentTransaction ft = fm.beginTransaction();
fm.replace(R.id.container, fragmentC, "fragmentC");
.commit();

按下fragmentC后退按钮

活动

@Override
public void onBackPressed() {
    if(getSupportFragmnetManager().findFragmnetByTag("fragmentC") !=null) {
        Intent myIntent = new Intent(this, Activity.class);
        startActivity(myIntent);
        finish();
    } else {
        super.onBackPressed();
    }
}

仅当您想返回到Activity加载的第一个片段时,此解决方案才有效,因此它可能不是最好的解决方案,但对我有用。