Android fragmentManager.popBackStack(标记,0)不';不行,
我使用Android fragmentManager.popBackStack(标记,0)不';不行,,android,android-fragments,Android,Android Fragments,我使用replace()和addToBackStack()来显示片段,使用popBackStack(标记,0)来弹出片段。但是在使用replace()之前,我试图通过fragmentManager.findFragmentByTag()找到相同的片段,如果找到了,我将用popbackbackstack(tag,0)替换replace() 例如: 活动开始->替换a片段并添加到BackStack->单击按钮替换b片段并添加到BackStack->单击按钮以popBackStack(affragme
replace()
和addToBackStack(
)来显示片段,使用popBackStack(标记,0)
来弹出片段。但是在使用replace()
之前,我试图通过fragmentManager.findFragmentByTag()
找到相同的片段,如果找到了,我将用popbackbackstack(tag,0)
替换replace()
例如:
活动开始->替换a片段
并添加到BackStack->单击按钮替换b片段
并添加到BackStack->单击按钮以popBackStack(affragment.tag,0)
弹出b片段
并返回到a片段
如果,作为例外,它与replace()
,pop()
,replace()
,pop()
,replace()
,pop()
,但有时它与replace()
,{突然fragmentManager.findFragmentByTag!=null
,所以pop()
,那么没有错误,它就不工作了
我试着调试,发现FragmentManagerImp
中的mBackStack.size()
和macative.size()
不相等。当我想显示BFragment
时,macative
包含A和B片段,但mBackStack
只包含AFragment
(替换片段的事务)。因为我可以在mActive
中找到BFragment
(使用fragmentManager.findFragmentByTag
),但找不到有关BFragment
的事务,所以pop()
失败
void replace() {
String tag = fragment.getClass().getName();
Fragment oldFragment = fragmentManager.findFragmentByTag(tag);
if (oldFragment != null) {
try {
fragmentManager.popBackStackImmediate(tag, 0);
} catch (Exception e) {
LogUtils.e(e.getMessage());
}
return;
}
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.layout_main_content, fragment, tag);
if (!TextUtils.isEmpty(tag)) {
transaction.addToBackStack(tag);
}
transaction.commitAllowingStateLoss();
}