简体   繁体   English

片段堆栈替换问题

[英]fragment backstack replace issue

I have fragments in backstack which is added by using addtobackstack function. 我在backstack中有一些片段,这些片段是使用addtobackstack函数添加的。 When i add a fragment without not using addtobackstack function and then press back button, the backstack is go back to wrong fragment. 当我在不使用addtobackstack函数的情况下添加片段,然后按返回按钮时,backstack将返回错误的片段。

For example: 例如:

Fragment A is replaced by using addtobackstack 使用addtobackstack替换片段A

Fragment B is replaced by using addtobackstack 使用addtobackstack替换片段B

Fragment C is replaced without not using addtobackstack 片段C被替换而未不使用addtobackstack

Fragment D is replaced by using addtobackstack 使用addtobackstack替换片段D

When i was in Fragment D and press the back button, i am going to Fragment A. But i must go to Fragment B. 当我进入片段D并按“后退”按钮时,我将进入片段A。但是我必须去片段B。

How can i fix it? 我该如何解决?

Thanks, 谢谢,

Put this code in Activity then try. 将此代码放在“活动”中,然后尝试。

Fragment is followed with Activity so when you use fragment with addToBackStack() with tag or passing null will add fragment in stack with help of FragmentManager. Fragment之后是Activity,因此当您将带有片段的addToBackStack()与标签一起使用或传递null时,将在FragmentManager的帮助下将片段添加到堆栈中。

Not necessary to addToBackStack(). 不需要addToBackStack()。 comment this code or pass null 注释此代码或传递null

    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager .beginTransaction();
    fragmentTransaction .replace(R.id.fragment_container, YouNextFragment);
    fragmentTransaction .addToBackStack(null);
    fragmentTransaction .commit();

When you press back button in Activity FragmentManager automatically popUp latest added fragment. 当您在Activity中按返回按钮时, FragmentManager会自动弹出最新添加的片段。

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {

            case android.R.id.home:                  
                if (getFragmentManager().getBackStackEntryCount() ==0) {
                    finish();
                }else{
                    getFragmentManager().popBackStack();
                }
                break;

            default:
                break;
        }

        return super.onOptionsItemSelected(item);
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM