Android Fragment回退栈导致奇怪问题

3
我正在单个活动中按以下顺序使用片段。
片段1 -> 片段2 -> 片段3 -> 片段4
我正在使用以下代码进行片段事务。
mFragmentTransaction=mFragmentManager.beginTransaction();
mFragmentTransaction.replace(R.id.fragment_container, mFragment,fragmentname);
mFragmentTransaction.addToBackStack(tag);
mFragmentTransaction.commit();

当用户在第三或第四个片段时,我想要的是在返回键按下时: 如果用户在第四个片段,则从片段4 -> 片段3 -> 片段1。 如果用户在第三个片段,则从片段3 -> 片段1。 我在onback press中使用以下代码。
if(mFragmentManager.findFragmentByTag("fragment 3")!=null){


            mFragmentManager.popBackStack("fragment 2",FragmentManager.POP_BACK_STACK_INCLUSIVE);



        }else{
            super.onBackPressed();
        }

但是当返回键按下时,它会导致以下奇怪的问题。
fragment 4 --> fragment 1 而不是 fragment 4 --> fragment 3 --> fragment 1。 fragment 3 --> fragment 1
请帮忙解决。
1个回答

4

你需要再添加一个嵌套的if语句。你已经有了一个用来检查片段是否为null的语句,但是你需要再检查一下该片段是否可见。

if(mFragmentManager.findFragmentByTag("fragment 3")!=null){
     if(mFragmentManager.findFragmentByTag("fragment 3").isVisible()){
        mFragmentManager.popBackStack("fragment 2",FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }
}
else{
        super.onBackPressed();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接