android - 使用导航组件处理工具栏后退按钮

标签 android android-toolbar android-mvvm android-navigation-graph

我遵循单一 Activity 方法。我有导航工具栏,每当我转到其他屏幕( fragment )而不是汉堡包图标时,我都会有后退箭头。

我想要实现的是,使用按下工具栏后退箭头的操作弹出我当前的 fragment 。

我试过了

requireActivity().getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
    @Override
    public void handleOnBackPressed() {
        NavHostFragment.findNavController(EventDetailsFragment.this)
        .navigate(R.id.action_nav_event_details_to_nav_home);
    }
});

但没有接到那边的电话,我通过在 Debug模式下运行应用程序进行了检查。

最佳答案

Activity oncreate 中:

navController = findNavController(R.id.my_nav_host)
//my_nav_host defined in activity xml file as id of fragment or FragmentContainerView
val appBarConfiguration = AppBarConfiguration(navController.graph)
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration)

和:

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    if (item.itemId == android.R.id.home) {
        onBackPressed()
        return true
    }
    return true
}

然后在你的 fragment 中:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val callback: OnBackPressedCallback =
        object : OnBackPressedCallback(true /* enabled by default */) {
            override fun handleOnBackPressed() {
                //do what you want here
            }
        }
    requireActivity().onBackPressedDispatcher.addCallback(this, callback)
}

关于android - 使用导航组件处理工具栏后退按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58516720/

相关文章:

android - 使用设置了三种以上颜色的 gradientDrawable

android - 通过 fragments 在 recyclerview 和 toolbar 之间共享元素

android - 像 Chrome 应用一样搜索 editText 动画

android - 如何保存谷歌登录集成 Firebase

android - 当我点击 float 操作菜单时,我想设置一个透明的背景层。

android - 如何重启onCreate函数

android - 如何在android中的工具栏添加 Action 搜索图标

android - 从 ViewModel 获取数据时如何显示 ProgressDialog

java - viewmodelfactory 和使用 Activity 模块的 View 模型注入(inject)之间的区别

android - android-如何访问模型类 MVVM 中的上下文或共享首选项