自定义后退按钮 - Android 导航

custom back button - Android Navigation

我有一个表单,想在用户离开之前收到用户的确认消息。

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

我试试这个:

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

但似乎只适用于为内置 software/hardware 后退按钮而非后退箭头按钮提供自定义后退行为

我该怎么做?

如果只想从Activity返回,那么可以在AndroidManifest.xml内添加 child class Activity.

android:parentActivityName="Parent_Activity_Name 

使用此代码在 backpress 上设置 Activity。

override fun onBackPressed() {
        if (isDiscardChanges) {
            discardDialog()
        } else {

            super.onBackPressed()
        }
    }

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