我有三个片段(片段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
答案 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加载的第一个片段时,此解决方案才有效,因此它可能不是最好的解决方案,但对我有用。