处理FragmentTransaction - addToBackStack()

时间:2017-08-20 08:20:47

标签: java android android-fragments fragment fragmenttransaction

我正在开发一个具有如下所示的活动和片段结构的应用程序:

enter image description here

我无法以这样的方式实现FragmentTransaction,当我按下手机中的后退按钮时,它可以返回到之前的片段。因此,该系列以SubFragment1开头,以SecondActivity结束:
SubFragment1 - > SubFragment2 - > SubFragment3 - > SecondActivity

我在FramgnetTransaction内处理FragmentB内容:

//This part is inside onCreateView of FragmentB
FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.container, SubFragment1(), FRAGMENT_SUB1);
fragmentTransaction.addToBackStack("first");
fragmentTransaction.commit();
}

public void goToSubFragment2(){
    FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.container, SubFragment2(), FRAGMENT_SUB2);
    fragmentTransaction.addToBackStack("second");
    fragmentTransaction.commit();
}

public void goToSubFragment3(){
    FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.container, SubFragment3(), FRAGMENT_SUB3);
    fragmentTransaction.addToBackStack("three");
    fragmentTransaction.commit();
}

如果我想转到任何SubFragment内的下一个SubFragment,我只会使用:

   ((FragmentB) this.getParentFragment()).goToSubFragment2();

最后,在SubFragment3中,我使用下面的代码转到SecondActivity

Intent intent = new Intent(getContext(), SecondActivity.class);
getContext().startActivity(intent);


那么,当我按下后退键时会发生什么...如果我在其中一个SubFragments,它会关闭应用程序。如果我已经在SecondActivity并按下后退按钮,应用程序崩溃并在LogCat中显示

Unable to resume activity {com.app_name.MainActivity1}: java.lang.IllegalStateException: Already executed.

总之,我的问题是:我做错了吗?处理Fragment中的FragmentTransaction内容是否被视为错误?如果是这样,那么正确的方法是什么?正确的方法向BackStack添加操作。 为什么后退按钮不能正常工作?

0 个答案:

没有答案