Android Fragments 移除Android上的片段转换回钉清除闪烁

erhoui1w  于 2022-11-24  发布在  Android
关注(0)|答案(3)|浏览(169)

我有两个问题:
1.我想在用户返回主页面时删除后栈中的所有碎片。但是,当我调用以下语句时,主页面上出现闪烁。

fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

如何消除这种闪烁?我试过这里的方法没有运气。Pop the fragment backstack without playing the Pop-Animation *
1.在片段过渡中我使用replace方法。但是在一些过渡中,我不想在用户按下back按钮时重新加载整个数据。为了实现这个,我使用了hide()和add()方法。当上面这样做时,由于有这么多动画,回栈删除过程变得非常糟糕。
是否有最佳实践来实现这一点?

gojuced7

gojuced71#

我遇到的问题和(1)完全一样。下面是对我有效的方法:

  • 使用命名的Backstate将显示第一片段的事务添加到后栈,例如:“底部”。
  • 返回堆栈是用popBackStackImmediate(“bottom”,... INCLUSIVE)清除的。

所以,每当我想用一个新的片段来替换backstack中的任何内容时,我就使用下面的函数:

protected void showInitialFragment(Fragment fragment) {
    getSupportFragmentManager()
            .popBackStackImmediate(BOTTOM_BACK_STATE, FragmentManager.POP_BACK_STACK_INCLUSIVE);

    getSupportFragmentManager()
            .beginTransaction()
            .add(R.id.fragment_content, fragment)
            .addToBackStack(BOTTOM_BACK_STATE)
            .commit();
}

我还必须重写onBackPressed(),如下所示:

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
        finish();
    } else {
        super.onBackPressed();
    }
}

希望这对你有帮助!

xkftehaa

xkftehaa2#

找到一个简单的方法https://stackoverflow.com/a/67005552/7418129。如果我迟到了,对不起。但它肯定会帮助别人。

eqfvzcg8

eqfvzcg83#

对我来说最好的解决方案是添加setReorderingAllowed(true)
示例:

parentFragmentManager.commit {
      setReorderingAllowed(true)
      addToBackStack(null)
      setCustomAnimations(R.anim.enter_right, R.anim.exit_left, R.anim.enter_left, R.anim.exit_right)
      replace<AnotherFragment>(R.id.fragment_container)
}

相关问题