Android导航抽屉拦截箭头后退按钮

时间:2019-12-19 16:15:31

标签: android navigation-drawer android-jetpack

我正在为我的Android应用程序使用最新的JetPack实现,我需要根据逻辑有条件地从一个片段中导航回来。

我发现了这段精美的代码:requireActivity().onBackPressedDispatcher.addCallback(),其中添加了我的逻辑。

但是仅当我按下手机的后退按钮(物理或虚拟)时,它才有效。如果单击导航时出现在汉堡位置的导航箭头,则不会调用此方法。

能否同时管理该事件?

预先感谢

1 个答案:

答案 0 :(得分:1)

JetPack为您管理碎片,因此您不必编写所有样板逻辑。可以在here上找到有关碎片的其他信息。

如本link中所述,导航组件将在所有目的地(“顶级”除外)上显示后退按钮。 您注意到,单击“后退”按钮时没有任何反应。您可以创建一个后备监听器,例如:

new AppBarConfiguration.Builder().setFallbackOnNavigateUpListener(listener).build()

要更好地理解为什么需要后备侦听器,是因为按后退按钮会调用NavigationUI.navigateUp(...),后者会调用NavController.navigateUp()尝试从后堆栈中弹出片段。如果没有要弹出的内容,它将返回false并将调用您的后备监听器。