【问题标题】:Intercept back navigation with Android Navigation Component使用 Android 导航组件拦截返回导航
【发布时间】:2020-06-19 20:31:29
【问题描述】:

我试图在退出当前片段/活动之前拦截 Android 应用上的后退导航以运行一些代码。

该应用使用 Android 导航组件,连接到底部导航栏和工具栏。当堆栈不为空时,工具栏会显示返回按钮。

我想要实现的是在退出片段之前显示一个自定义对话框,询问用户是否要保存数据。我的片段包含几个 EditText 字段和一个保存按钮,应按下该按钮将数据保存到存储库。如果用户不这样做,则返回时应显示弹出窗口。

我已经设法使用“OnBackPressedCallback”拦截了 android 后退按钮,但工具栏后退按钮仍会关闭片段。

有没有办法拦截这两种方法(从工具栏按钮返回,以及使用android返回按钮)?

谢谢

【问题讨论】:

    标签: android navigation toolbar back


    【解决方案1】:

    您是否尝试过在工具栏上使用导航监听器?

    https://developer.android.com/reference/android/widget/Toolbar#setNavigationOnClickListener(android.view.View.OnClickListener)

    你必须分别处理这两种情况,这种情况没有单一的方法。

    【讨论】:

    • 我会试试的!谢谢:)
    【解决方案2】:

    您可以查看 NavigationUI.setupWithNavController(toolbar, navController, appBarConfiguration) 的代码,它向您展示了如何为工具栏实现向上导航。

    这是我的解决方案:

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        // default toolbar setup with navigation components
        final NavController navController = Navigation.findNavController( view );
        final AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder( navController.getGraph() ).build();
        NavigationUI.setupWithNavController( toolbar, navController, appBarConfiguration );
    
        // own changes like icon and dialog
        toolbar.setNavigationIcon( R.drawable.ic_close_24 );
        toolbar.setNavigationOnClickListener( v -> new AlertDialog.Builder( requireContext() )
            .setMessage( R.string.abort_editing )
            .setPositiveButton( R.string.dialog_button_close, (dialog, whichButton) -> NavigationUI.navigateUp( navController, appBarConfiguration ) )
            .setNegativeButton( R.string.dialog_button_cancel, null )
            .show() );
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-06
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多