第一种:popBackStack(int id, int flags)
第一个参数就是FragmentTransaction调用commit()返回后的整数,第二个参数传0表示回退到第一个参数包含的状态,传FragmentManager.POP_BACK_STACK_INCLUSIVE表示第一个参数的状态也回退调。
第二种:popBackStack(String name, int flags)
第一个参数是
FragmentTransaction的
addToBackStack(string)方法中的string。第二个参数跟第一种一样。
第三种popBackStack(),这个没什么可说的,就是回退一次。
代码如下
public void onClick(View v) {
FragmentTransaction ft = fm.beginTransaction();
/* popBackStack(int id, int flags)时的情况*/
if(v == btn1){
if(fm.getFragments() != null && fm.getFragments().contains(fragment1)){
Toast.makeText(this,"已add",Toast.LENGTH_SHORT).show();
return;
}
ft.add(R.id.framelayout1,fragment1);
ft.addToBackStack(null);
id1 = ft.commit();
}else if(v == btn2){
ft.add(R.id.framelayout2,fragment2);
ft.addToBackStack(null);
id2 = ft.commit();
}else if(v == btn3){
ft.add(R.id.framelayout3,fragment3);
ft.addToBackStack(null);
id3 = ft.commit();
}else{
//依次点击btn1,btn2,btn3,再点击btn4
fm.popBackStack(id1,fm.POP_BACK_STACK_INCLUSIVE); //FragmentManager.POP_BACK_STACK_INCLUSIVE表示弹出时包含id1,也就是说第一个参数也会被回退调
// fm.popBackStack(id1,0); //参数0表示弹出时不包含id1,也就是第一个参数不会回退
}
/* popBackStack(String name, int flags)情况
if(v == btn1){
ft.add(R.id.framelayout1,fragment1);
ft.addToBackStack("kedou1");
ft.commit();
}else if(v == btn2){
ft.add(R.id.framelayout2,fragment2);
ft.addToBackStack("kedou2");
ft.commit();
}else if(v == btn3){
ft.add(R.id.framelayout3,fragment3);
ft.addToBackStack("kedou3");
ft.commit();
}else{
//依次点击btn1,btn2,btn3,再点击btn4
// fm.popBackStack("kedou1",fm.POP_BACK_STACK_INCLUSIVE); //FragmentManager.POP_BACK_STACK_INCLUSIVE表示弹出时包含id1,也就是说第一个参数也会被回退调
fm.popBackStack("kedou1",0); //参数0表示弹出时不包含id1,也就是第一个参数不会回退
}
*/
一种是
FragmentManager.POP_BACK_STACK_INCLUSIVE
第二种传0时:
源码:http://yunpan.cn/cd6iQ9a8dLtLr (提取码:b9e5)