自定义后退按钮-Android导航

时间:2019-10-13 22:24:55

标签: android android-architecture-components android-navigation

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

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

android navigation back button

我试试这个:

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

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

我该怎么做?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果您只想从Activity返回,则可以在AndroidManifest.xml子类Activity中添加。

android:parentActivityName="Parent_Activity_Name 

答案 2 :(得分:0)

使用此代码可在backpress上设置“活动”。

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

            super.onBackPressed()
        }
    }