带导航组件的工具栏后退按钮

时间:2019-10-23 06:30:37

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

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

我想要实现的是,通过按工具栏的后退箭头来弹出当前片段。

我尝试过

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

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

5 个答案:

答案 0 :(得分:7)

Activity中创建:

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

答案 1 :(得分:1)

如果您在 xml 中使用 custom toolbar,您可以考虑使用以下方法

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_chat)

    setSupportActionBar(activity_chat_toolbar)

       
   activity_chat_toolbar.setNavigationOnClickListener {
        onBackPressed() <-- custom toolbar's back press
    }

    val navHostFrag =
            supportFragmentManager.findFragmentById(R.id.chat_fragment_container_view) as NavHostFragment
    navController = navHostFrag.navController
    navController.setGraph(R.navigation.chat_nav_graph, intent.extras)

    setupActionBarWithNavController(navController)
}

// Function to check startDestination to finish() the parent activity
override fun onBackPressed() {
    if(navController.graph.startDestination == navController.currentDestination?.id) {
        finish()
    } else {
        super.onBackPressed()
    }
}

override fun onSupportNavigateUp(): Boolean {
   return navController.navigateUp() || super.onSupportNavigateUp()
}

答案 2 :(得分:0)

我按照下面的教程进行操作,对我来说很好

Navigation component with drawer

让我知道它对您有用吗?

答案 3 :(得分:0)

将此代码添加到父活动中

添加onCreate方法

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

也在父级活动中添加此方法

 @Override
public boolean onSupportNavigateUp() {
    return super.onSupportNavigateUp();
}

答案 4 :(得分:0)

Toolbar toolbar = findviewbyid(R.id.toolbar);
toolbar.setnavigationonclicklistener(new view.onclicklistener(){
 code here  
});
setsupportactionbar(toolbar);