【发布时间】:2017-05-03 23:53:53
【问题描述】:
我有很多碎片。例如:A1、A2、A3、B1、B2、C1、C2、C3。所有片段都在一个容器 FActivity 中。 我希望当当前 Fragment 是 A1 或 B1 或 c1 时,我按返回键,项目完成。 我按照这个顺序隐藏前一个显示下一个,都是addToBackStack。但是当我调用FActivity.onBackPressed()时,我发现popBack没有恢复上一个片段,感到困惑。有些片段丢失了。尤其是B1和C1 不在后台。他们错过了。
这是我的隐藏和显示代码:
private void showFragment(FragmentTransaction ft1, Fragment fm1, Fragment fm2, String tag) {
if (fm1 != null) {
if (!fm1.isAdded()) {
ft1.add(R.id.information_detail, fm1).hide(fm1);
} else {
ft1.hide(fm1);
}
ft1.addToBackStack(tag);
}
if (!fm2.isAdded()) {
ft1.add(R.id.infomation_detail, fm2, tag);
} else {
ft1.show(fm2);
}
ft1.commit();
}
片段控制
Fragment currentFragment ;
public void startFragmentOnParameter(Fragment oldFragment, String tag, String... param) {
FragmentTransaction ft1 = getFragmentManager().beginTransaction();
switch (tag) {
case "A1":
A1= new A1();
showFragment(ft1,oldFragment, A1, true, "A1");
currentFragment = mPatientCaseInHistory;
break;
case "A2":
A2= new A2();
showFragment(ft1, oldFragment, A2, false, "A2");
currentFragment = mPatientWithArrear2;
break;
case "A3":
A3= new A3();
showFragment(ft1, oldFragment, A3, false, "A3");
currentFragment = mPatientsCases3;
break;
......
}
和 onBackPressed
public void onBackPressed() {
String name = currentFragment.getClass().getSimpleName();
if(name.equals("A1")||name.equals("B2")||name.equals("C1")){
finish();
}else{
super.onBackPressed();
currentFragment = (Fragment) getFragmentManager().findFragmentById(R.id.infomation_detail);
}
}
我的代码有什么问题?
【问题讨论】:
-
尝试删除 super.onBackPressed();
-
@AjinkyaS 如果我删除 super.onBackPressed(),popBackStack() 将不起作用。