【问题标题】:How to override the behavior of back button in toolbar when using navigation component使用导航组件时如何覆盖工具栏中后退按钮的行为
【发布时间】:2021-03-27 03:32:02
【问题描述】:

我有三个片段 A、B 和 C,我可以从 A 导航到 B,也可以从 A 导航到 C。当我使用导航组件从 A 导航到 B 时,我在 AppBar 中看到一个返回箭头,它导航回 A .当按下该箭头时,我想显示一个如下图所示的对话框。但是当我从 C 导航回 A 时,我不想看到那个对话框。有没有办法让这种行为只出现在一个片段中?我尝试使用 requireActivity().onBackPressedDispatcher.addCallback 但它仅适用于后退按钮。谢谢

【问题讨论】:

    标签: android android-jetpack android-architecture-navigation


    【解决方案1】:

    试试这个,通过覆盖 onOptionsItemSelected()onBackPressed() 方法,它将处理两种情况,您的工具栏后退按钮和硬件后退按钮

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    
        switch (item.getItemId()) {
            case android.R.id.home:
                onBackPressed();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    
    @Override
    public void onBackPressed() {
       // PUT YOUR Custom implementation here, related to showing dialog
    
    
    }
    

    【讨论】:

    • 我还是没有尝试,那个箭头是自动添加的,我猜它是 NavigationUI 的一部分
    • 你是否尝试过覆盖 onOptionsItemSelected() 方法,只需复制我的完整代码,它应该可以工作
    • 是的,我认为它不适用于导航组件
    • 您可以删除主题中的导航栏,并可以添加工具栏
    【解决方案2】:

    您的问题不是很清楚.. 但是您是否尝试过覆盖按下按钮的方法来显示您的对话框.. 但是,如果可以的话,您应该编辑您的问题以充分解释您想要什么

    【讨论】:

      【解决方案3】:

      从活动中,您可以拦截向上导航以检查当前是否设置了任何onBackPressedDispatcher,在这种情况下,将向上导航操作委托给片段:

      override fun onSupportNavigateUp(): Boolean {
          return if (onBackPressedDispatcher.hasEnabledCallbacks()) {
              onBackPressedDispatcher.onBackPressed()
              true
          } else {
              navController.navigateUp() || super.onSupportNavigateUp()
          }
      }
      

      然后从片段中,您可以像以前一样使用onBackPressedDispatcher

      requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) { showMyExitDialog() }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-19
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-06
        相关资源
        最近更新 更多