首页 > 解决方案 > 使用导航组件处理工具栏后退按钮

问题描述

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

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

我试过了

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);
    }
});

但是没有接到电话,我通过在调试模式下运行应用程序进行了检查。

标签: androidandroid-toolbarandroid-mvvmandroid-navigation-graph

解决方案


Activity创建:

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
}

然后在你的片段中:

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)
}

推荐阅读