繁体   English   中英

不使用 addToBackStack 时替换片段错误顺序

[英]Replacing fragment wrong order when not using addToBackStack

我有一个菜单,用户可以在其中单击不同的按钮并在不同的底部栏之间切换。

当用户单击 button1 时会发生以下情况:

setFragment(R.id.bottom_bar_container, new FooBottomBar());

当他们点击 button2 时,它会调用:

setFragment(R.id.bottom_bar_container, new BarBottomBar());

下面是 setFragment 方法:

private void setFragment(int layout, Fragment newFragment) {
    String tag = newFragment.getClass().getCanonicalName();

    Fragment fragment = getFragmentManager().findFragmentByTag(tag);

    if (fragment == null) {
        fragment = newFragment;
    }

    Log.d("Tag", "Replacing with " + tag);

    getFragmentManager()
            .beginTransaction()
            .replace(layout, fragment, tag)
            .commit();
}

这总体上运行良好,但如果用户垃圾邮件点击两个按钮,可能会发生一些有趣的事情。

日志猫:

Tag: Replacing with com.example.FooBottomBar
Tag: Replacing with com.example.BarBottomBar

但是在 UI 中我可以看到FooBottomBar即使最后一个替换是BarBottomBar

我发现如果我添加addToBackStack(null)问题就会消失,但我不想把它放在后堆栈上。

getFragmentManager()
        .beginTransaction()
        .replace(layout, fragment, tag)
        .addToBackStack(null)
        .commit();

我想知道这个问题的原因以及是否有任何解决方案。

使用getChildFragmentManager()commitNow()代替。

getChildFragmentManager()
        .beginTransaction()
        .replace(layout, fragment, tag)
        .commitNow();

暂无
暂无

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

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