我有三个片段(片段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();
}
}
仅当您想返回到活动加载的第一个片段时,此解决方案才有效,因此它可能不是最好的解决方案,但它对我有用。