首页 > 解决方案 > 自定义后退按钮 - Android 导航

问题描述

我有一个表格,想在用户离开之前从用户那里得到确认消息。

当用户触摸此按钮时,我想提供自定义后退按钮:

android导航返回按钮

我试试这个:

val onBackPressedCallback = object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
            }
        }
requireActivity().onBackPressedDispatcher.addCallback(this,onBackPressedCallback)

但似乎只适用于为内置软件/硬件后退按钮提供自定义后退行为,而不是后退箭头按钮

我怎样才能做到这一点?

标签: androidandroid-architecture-componentsandroid-navigation

解决方案


使用onSupportNavigateUp, 并替换yourCurrentFragmentID为您当前的片段 ID。所有这些都应该在 MainActivity 中完成。

 navController = findNavController(R.id.nav_host_fragment)

 setupActionBarWithNavController(navController!!)

 override fun onSupportNavigateUp(): Boolean {
        return when(navController?.currentDestination?.id) {
            R.id.yourCurrentFragmentID -> {
                showDialog()
                true
            }
            else -> navController?.navigateUp()!!
        }
    }

编辑

如果您的片段已经使用onOptionsItemSelected,您可以通过检查来处理逻辑itemId

 override fun onOptionsItemSelected(item: MenuItem): Boolean {
        val id = item.itemId
        if (id == R.id.save) {
           // your save button code logic 
        }else if(id ==android.R.id.home){ 
            // display confirmation message
        }
        return super.onOptionsItemSelected(item)
    }

推荐阅读