refactor(activity): 统一使用 onBackPressedDispatcher.addCallback 替代 onBackPressed

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-14 09:45:58 +08:00
co-authored by Claude Sonnet 4.6
parent f1ffc67b9b
commit da7b5b09a0
8 changed files with 53 additions and 85 deletions
@@ -15,10 +15,12 @@ import com.shuwei.dish.match.entity.CookFoodGoodsEntity
/**
* 菜品识别结果弹窗,继承 BottomSheetDialog 确保只初始化一次
* @param activity 宿主 Activity
* @param onDismiss 弹窗关闭时的额外回调(可选)
* @param onItemSelected 用户点击某一菜品时的回调
*/
class FoodRecognizeDialog(
private val activity: BaseActivity,
private val onDismiss: (() -> Unit)? = null,
private val onItemSelected: (item: CookFoodGoodsEntity) -> Unit
) : BottomSheetDialog(activity, R.style.BottomSheet) {
@@ -39,7 +41,7 @@ class FoodRecognizeDialog(
setContentView(binding.root)
setCancelable(true)
behavior.skipCollapsed = false
setOnDismissListener { activity.hideStatusBar() }
setOnDismissListener { activity.hideStatusBar(); onDismiss?.invoke() }
binding.recyclerView.run {
layoutManager = GridLayoutManager(activity, 2, GridLayoutManager.VERTICAL, false)
adapter = this@FoodRecognizeDialog.adapter
@@ -5,6 +5,7 @@ import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.activity.addCallback
import androidx.activity.viewModels
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.ItemTouchHelper
@@ -75,6 +76,7 @@ class DishSamplingActivity : BaseActivity() {
binding.tvDishPartWeight.text = "${weight}"
}
})
addBackKeyListener()
}
private fun setTitleBar() {
@@ -91,7 +93,7 @@ class DishSamplingActivity : BaseActivity() {
}, backAction = {
it.visible()
it.setOnClickListener {
onBackPressed()
onBackPressedDispatcher.onBackPressed()
}
})
}
@@ -110,19 +112,21 @@ class DishSamplingActivity : BaseActivity() {
appViewModel.getCookFoodList(cookMode = 1) { action(it) }
}
@Suppress("DEPRECATION")
@SuppressLint("GestureBackNavigation")
@Deprecated("Deprecated in Java")
override fun onBackPressed() {
if (list.isEmpty().not()) {
//说明有新增的食材
saveDataRemindDialog()
return
/**
* 监听返回键
*/
fun addBackKeyListener() {
onBackPressedDispatcher.addCallback(this) {
if (list.isEmpty().not()) {
//说明有新增的食材
saveDataRemindDialog()
return@addCallback
}
if (pageFrom == HOME) {
startActivity<SamplingListActivity>()
}
onBackPressedDispatcher.onBackPressed()
}
if (pageFrom == HOME) {
startActivity<SamplingListActivity>()
}
super.onBackPressed()
}
private fun saveDataRemindDialog() {
@@ -2,6 +2,7 @@ package com.shuwei.dish.match.ui
import android.annotation.SuppressLint
import android.os.Bundle
import androidx.activity.addCallback
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.shuwei.dish.match.R
@@ -48,6 +49,7 @@ class HomeActivity : BaseActivity() {
BaseApp.canteenId = "0"
}
}
onBackPressedDispatcher.addCallback(this) {}
// binding.radioGroup.check(R.id.radioZk)
initRecyclerView()
// HttpUtil.getAppToken()
@@ -164,12 +166,4 @@ class HomeActivity : BaseActivity() {
}
}
@Deprecated("Deprecated in Java")
@SuppressLint("GestureBackNavigation", "MissingSuperCall")
override fun onBackPressed() {
//super.onBackPressed()
//当前页面不允许返回
//dialog = toast("不允许返回操作")
}
}
@@ -7,7 +7,7 @@ import android.os.Bundle
import android.os.SystemClock
import android.view.KeyEvent
import android.view.animation.RotateAnimation
import androidx.activity.OnBackPressedCallback
import androidx.activity.addCallback
import androidx.core.graphics.toColorInt
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
@@ -247,11 +247,9 @@ class InitActivity : BaseActivity() {
}
private fun addBackKeyListener() {
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// 禁用返回键,不执行任何操作
}
})
onBackPressedDispatcher.addCallback(this) {
// 禁用返回键,不执行任何操作
}
}
}
@@ -19,6 +19,7 @@ import com.shuwei.dish.match.entity.CookFoodEntity
import com.shuwei.dish.match.entity.CookFoodGoodsEntity
import com.shuwei.dish.match.entity.FoodRecord
import android.view.ViewGroup
import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import com.shuwei.dish.match.databinding.LayoutCameraPreviewBinding
import com.shuwei.dish.match.objbox.FoodModule
@@ -77,12 +78,13 @@ class PrepareCookActivity : BaseActivity() {
}
}, backAction = {
it.setOnClickListener {
onBackPressed()
onBackPressedDispatcher.onBackPressed()
}
})
food = intent.extras?.getSerializable(FOOD_ITEM) as FoodRecord?
binding.tvDishName.text = food?.foodName ?: ""
addViewClickListener()
addBackKeyListener()
initCamera(binding.flCameraContainer)
initRecyclerView()
@@ -303,14 +305,11 @@ class PrepareCookActivity : BaseActivity() {
private var firstReqSize = 0
private val list = mutableListOf<CookFoodGoodsEntity>()
private val recognizeDialog by lazy {
FoodRecognizeDialog(this) { item ->
// TODO: 处理识别结果选中
}
.apply {
setOnDismissListener {
isTakingPhoto.set(false)
}
}
FoodRecognizeDialog(
activity = this,
onDismiss = { isTakingPhoto.set(false) },
onItemSelected = foodSelectCallback
)
}
private val dishPartAdapter by lazy {
DishPartAdapter(list).apply {
@@ -413,28 +412,18 @@ class PrepareCookActivity : BaseActivity() {
cameraUtils.setPreviewController(previewBinding.previewView)
}
@Suppress("DEPRECATION")
@SuppressLint("GestureBackNavigation")
@Deprecated("Deprecated in Java")
override fun onBackPressed() {
val count = list.count { !it.isOriginalData }
if (count > 0) {
//说明有新增或者设置重量
saveDataRemindDialog()
return
/**
* 注册返回键监听,替代已废弃的 onBackPressed()
*/
private fun addBackKeyListener() {
onBackPressedDispatcher.addCallback(this) {
val count = list.count { !it.isOriginalData }
if (count > 0) {
saveDataRemindDialog()
return@addCallback
}
finish()
}
// if (list.size > firstReqSize) {
// //说明有新增的食材
// saveDataRemindDialog()
// return
// }
// val filterResult = list.firstOrNull { (it.useWeight ?: 0.toDouble()) > 0.toDouble() }
// if (filterResult != null) {
// //说明有称重的数据
// saveDataRemindDialog()
// return
// }
super.onBackPressed()
}
/**
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import androidx.activity.addCallback
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
@@ -47,6 +48,7 @@ class SamplingListActivity : BaseActivity() {
initRecyclerView()
addViewListener()
requestData(true)
onBackPressedDispatcher.addCallback(this) { }
}
@@ -95,14 +97,6 @@ class SamplingListActivity : BaseActivity() {
refreshPage(isCooking)
}
@Deprecated("Deprecated in Java")
@SuppressLint("GestureBackNavigation", "MissingSuperCall")
override fun onBackPressed() {
//super.onBackPressed()
//当前页面不允许返回
//dialog = toast("不允许返回操作")
}
private var list: MutableList<FoodRecord> = mutableListOf()
private val dishAdapter by lazy {
SamplingAdapter(list = list).apply {
@@ -1,9 +1,8 @@
package com.shuwei.dish.match.ui
import android.annotation.SuppressLint
import android.content.Intent
import android.os.Bundle
import androidx.activity.viewModels
import androidx.activity.addCallback
import androidx.lifecycle.ViewModelProvider
import com.shuwei.dish.match.R
import com.shuwei.dish.match.base.BaseActivity
@@ -13,8 +12,6 @@ import com.shuwei.dish.match.db.AppRepository
import com.shuwei.dish.match.dialog.DialogTool
import com.shuwei.dish.match.entity.CookFoodEntity
import com.shuwei.dish.match.entity.FoodRecord
import com.shuwei.dish.match.entity.FoodRecordBean
import com.shuwei.dish.match.net.NetViewModel
import com.shuwei.dish.match.ui.fragment.DishListFragment
import com.shuwei.dish.match.utils.KeyboardUtil
import com.shuwei.dish.match.utils.ext.addOnActionSearchListener
@@ -24,7 +21,6 @@ import com.shuwei.dish.match.utils.ext.toast
import com.shuwei.dish.match.utils.ext.visible
import com.shuwei.dish.match.viewmodel.AppViewModel
import com.shuwei.dish.match.viewmodel.factory.AppFactory
import kotlin.getValue
class SelectDishActivity : BaseActivity() {
@@ -67,6 +63,7 @@ class SelectDishActivity : BaseActivity() {
initViewModel()
addViewListener()
loadFragment()
onBackPressedDispatcher.addCallback(this) {}
}
private fun initViewModel() {
@@ -186,14 +183,6 @@ class SelectDishActivity : BaseActivity() {
}
}
@Deprecated("Deprecated in Java")
@SuppressLint("GestureBackNavigation", "MissingSuperCall")
override fun onBackPressed() {
//super.onBackPressed()
//当前页面不允许返回
// dialog = toast("不允许返回操作")
}
private var isVisible = false
override fun onResume() {
super.onResume()
@@ -6,7 +6,7 @@ import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.activity.OnBackPressedCallback
import androidx.activity.addCallback
import com.shuwei.dish.match.base.BaseActivity
import com.shuwei.dish.match.base.GlobalData
import com.shuwei.dish.match.databinding.ActivitySlaveBinding
@@ -55,11 +55,9 @@ class SlaveActivity : BaseActivity() {
* 禁用返回键,防止退回 InitActivity 后重复打开本页
*/
private fun addBackKeyListener() {
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// 禁用返回键,不执行任何操作
}
})
onBackPressedDispatcher.addCallback(this) {
// 禁用返回键,不执行任何操作
}
}
/**