Android Navigation Drawer拦截箭头后退按钮
Android Navigation Drawer intercept arrow back button
我正在为我的 Android 应用程序使用最新的 JetPack 实现,我需要根据逻辑有条件地从我的一个片段导航回来。
我发现了这段精美的代码:requireActivity().onBackPressedDispatcher.addCallback()
我在其中添加了我的逻辑。
但它只有在我按下 phone 的后退按钮(物理或虚拟)时才有效。如果我在导航发生时单击出现在汉堡包位置的导航箭头,则不会调用此方法。
是否也可以在片段中管理此事件?
提前致谢
JetPack 为您管理片段,因此您不必编写所有样板逻辑。有关片段的更多信息,请参见 here.
如本 link 中所述,导航组件将在除 "top-level" 之外的所有目的地上显示后退按钮。
您注意到单击后退按钮时没有任何反应。您可以创建一个后备侦听器,例如:
new AppBarConfiguration.Builder().setFallbackOnNavigateUpListener(listener).build()
为了更好地理解为什么需要后备侦听器,是因为按下后退按钮会调用 NavigationUI.navigateUp(...),后者会调用 NavController.navigateUp() 尝试从后栈。如果没有要弹出的东西,它将 return false 并且你的后备侦听器将被调用。
我正在为我的 Android 应用程序使用最新的 JetPack 实现,我需要根据逻辑有条件地从我的一个片段导航回来。
我发现了这段精美的代码:requireActivity().onBackPressedDispatcher.addCallback()
我在其中添加了我的逻辑。
但它只有在我按下 phone 的后退按钮(物理或虚拟)时才有效。如果我在导航发生时单击出现在汉堡包位置的导航箭头,则不会调用此方法。
是否也可以在片段中管理此事件?
提前致谢
JetPack 为您管理片段,因此您不必编写所有样板逻辑。有关片段的更多信息,请参见 here.
如本 link 中所述,导航组件将在除 "top-level" 之外的所有目的地上显示后退按钮。 您注意到单击后退按钮时没有任何反应。您可以创建一个后备侦听器,例如:
new AppBarConfiguration.Builder().setFallbackOnNavigateUpListener(listener).build()
为了更好地理解为什么需要后备侦听器,是因为按下后退按钮会调用 NavigationUI.navigateUp(...),后者会调用 NavController.navigateUp() 尝试从后栈。如果没有要弹出的东西,它将 return false 并且你的后备侦听器将被调用。