【问题标题】:Android Navigation Drawer intercept arrow back buttonAndroid Navigation Drawer 拦截箭头返回按钮
【发布时间】:2019-12-19 16:15:31
【问题描述】:

我正在为我的 Android 应用使用最新的 JetPack 实现,我需要根据逻辑有条件地从我的片段之一返回。

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

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

是否可以在片段中也管理此事件?

提前致谢

【问题讨论】:

  • 我已经在我的一个项目中使用了这个 -> stackoverflow.com/questions/55951871/…
  • @tiborK 抱歉迟到了。谢谢你的评论。您能否通过一些解释将其作为答案,以便我可以将其标记为已解决?

标签: android navigation-drawer android-jetpack


【解决方案1】:

JetPack 为您管理片段,因此您不必编写所有样板逻辑。更多关于片段的信息可以在here找到。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多