2
我有一些碎片将被以下方法替换。我认为我的代码有问题,因为我想阻止将多个片段添加到后端堆栈中。如果我点击片段B两次,所有实例将被添加到后退栈中,并且按下后退按钮将通过两个创建的实例。Android碎片 - 如果已经存在,则从碎片堆栈中移除碎片
public void replaceFragment(Fragment fragment, boolean addToBackStack, boolean customAnimation) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
String tag = fragment.getClass().getSimpleName();
if (customAnimation) {
transaction.setCustomAnimations(R.anim.slide_in_bottom, R.anim.slide_out_bottom, R.anim.slide_in_bottom, R.anim.slide_out_bottom);
}
transaction.replace(R.id.fragment_container, fragment, tag);
// remove from back stack if exists
// always return false!
boolean f = manager.popBackStackImmediate(tag, 0);
if (addToBackStack) {
transaction.addToBackStack(tag);
}
transaction.commit();
}
这是我真正需要的。谢谢丹尼尔。我有个问题。为什么你将'null'作为返回堆栈名称?如果我传递片段标签会发生什么? – Alireza