android-fragments 在onBackPressed中需要popBackStack

rkue9o1l  于 2022-11-14  发布在  Android
关注(0)|答案(3)|浏览(131)

请帮助我理解当调用“onBackPressed”时,回栈是如何在本地工作的。我注意到,即使从视觉上看它返回到了前一个片段,但应该弹出的片段(我退出的片段)仍然在回栈中。这是为什么?我将不得不求助于

@Override
    public void onBackPressed() {
        if(getFragmentManager().getBackStackEntryCount() > 0)
             getFragmentManager().popBackStack();
    }

这似乎违反了直觉。那么在一个不在后栈顶部的片段上是真的吗?那么不太多的栈...
编辑:澄清一下,我的问题是为什么onBackPressed还没有弹出回栈,而需要一个额外的调用来弹出它作为一个解决方案?如果这只是它的方式,我很好,但我希望确认。

vu8f3i0k

vu8f3i0k1#

Android应用有一个Activity堆栈。当在Activity上调用onBackPressed时,它会弹出上一个Activity并完成当前Activity
如果您有一个带有片段的Activity,则会有另一个堆栈(Activity的片段堆栈),如果您按照解决方案建议的方式重写onBackPressed,则可以控制该堆栈,以便Activity在其所有片段都被弹出之前不会完成

6ovsh4lw

6ovsh4lw2#

只需拨打

findNavController().popBackStack()
ffx8fchx

ffx8fchx3#

在下面添加行:

addToBackStack("Some String").commit();

您可以在此处找到解决方案

相关问题