自定义后退按钮 - 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)
}
我有一个表单,想在用户离开之前收到用户的确认消息。
我想在用户触摸此按钮时提供自定义后退按钮:
我试试这个:
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)
}