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