从片段C返回片段A后退按钮
问题描述:
我有一个片段,例如A→B→C。当我在片段C中,并按下后退按钮时,我需要得到片段A也就是说,片段B不需要添加到backStack。这是实现片段之间转换的代码。从片段C返回片段A后退按钮
FragmentManager fragmentManager = this.getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
Fragment fragment = fragmentManager.findFragmentByTag(tag);
fragment.getArguments().putAll(args);
transaction.replace(idContainer, fragment, tag);
transaction.addToBackStack(null);
transaction.commit();
在片段C的开口,我不使用transaction.addToBackStack(空);
现在我有以下问题。从片段С我单击后退按钮并进入片段A,但两层碎片相互叠加。
答
当你调用Transaction.addToBackStack(null)
,你Fragment
添加到堆栈中,所以你不应该叫,当你不想要添加片段堆栈中。
你应该做的
什么,当你与Fragment-B
更换你的你不应该叫Transaction.addToBackStack(null)
,但是当你与Fragment-C
替换Fragment-B
你应该叫Transaction.addToBackStack(null)
。
这样做你和Fragment-C
将backstacked但Fragment-B
不会,现在当你按下后退按钮,你将有。
答
您可以使用下面的代码Fragment_C要返回Fragment_A上后退按键从fragment_C
@Override
public void onResume() {
super.onResume();
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){
Fragment_A fragment = null;
fragment = new Fragment_A();
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container_body, fragment);
fragmentTransaction.commit();
return true;
}
return false;
}
});
}
答
从A向B的B
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new BFragment(), "BFragment").addToBackStack("A_TO_B").commit();
过渡到C
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new CFragment(), "CFragment").addToBackStack("B_TO_C").commit();
覆盖活动的onBackPressed()方法。
@Override
public void onBackPressed();
if (getSupportFragmentManager().findFragmentByTag("CFragment") != null) {
getSupportFragmentManager().popBackStack("A_TO_B",
FragmentManager.POP_BACK_STACK_INCLUSIVE);
} else {
super.onBackPressed();
}
}
在堆栈中添加所有的片段,然后迭代循环,直到第一个片段 – Bhavnik
您使用viewpager? –
也许你想检查[这个问题](http://stackoverflow.com/questions/18634207/difference-between-add-replace-and-addtobackstack) –