Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android fragmentManager.popBackStack(标记,0)不';不行,_Android_Android Fragments - Fatal编程技术网

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();
    }