按下后退按钮后片段重叠



我有三个片段(片段A,片段B,片段C(。代码从片段 A 到片段 B,然后从片段 B 到 Fragemnt C。

当我按下后退按钮时,我从片段C转到片段A。

按下后退按钮后,将显示片段A,但您也可以在其后面看到片段C。

片段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();

当按下后退按钮时,我想从片段C转到片段A,而不是在后台显示片段C

在addToBackStack中使用null作为参数,而不是"Null">

FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction;
    ft.repalce(R.id.container, fragmentB)
      .addToBackStack(null)  
      .commit();
您可以在

替换片段时尝试此操作

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();
    }

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

对我有用的解决方案是使用 onBackPressed(( @Override重新启动活动,默认情况下这将重新加载片段 A。

片段 B

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

片段C后退按钮按下

活动

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

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

最新更新