From da7b5b09a04b24d7985eb79bf667d270e2601198 Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Tue, 14 Apr 2026 09:45:58 +0800 Subject: [PATCH] =?UTF-8?q?refactor(activity):=20=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20onBackPressedDispatcher.addCallback=20?= =?UTF-8?q?=E6=9B=BF=E4=BB=A3=20onBackPressed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- .../dish/match/dialog/FoodRecognizeDialog.kt | 4 +- .../dish/match/ui/DishSamplingActivity.kt | 30 +++++++----- .../com/shuwei/dish/match/ui/HomeActivity.kt | 10 +--- .../com/shuwei/dish/match/ui/InitActivity.kt | 10 ++-- .../dish/match/ui/PrepareCookActivity.kt | 49 +++++++------------ .../dish/match/ui/SamplingListActivity.kt | 10 +--- .../dish/match/ui/SelectDishActivity.kt | 15 +----- .../com/shuwei/dish/match/ui/SlaveActivity.kt | 10 ++-- 8 files changed, 53 insertions(+), 85 deletions(-) diff --git a/app/src/main/java/com/shuwei/dish/match/dialog/FoodRecognizeDialog.kt b/app/src/main/java/com/shuwei/dish/match/dialog/FoodRecognizeDialog.kt index bd396db..5b4cb3e 100644 --- a/app/src/main/java/com/shuwei/dish/match/dialog/FoodRecognizeDialog.kt +++ b/app/src/main/java/com/shuwei/dish/match/dialog/FoodRecognizeDialog.kt @@ -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 diff --git a/app/src/main/java/com/shuwei/dish/match/ui/DishSamplingActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/DishSamplingActivity.kt index 2578604..2b70d63 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/DishSamplingActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/DishSamplingActivity.kt @@ -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() + } + onBackPressedDispatcher.onBackPressed() } - if (pageFrom == HOME) { - startActivity() - } - super.onBackPressed() } private fun saveDataRemindDialog() { diff --git a/app/src/main/java/com/shuwei/dish/match/ui/HomeActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/HomeActivity.kt index 88c475c..ccb1d31 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/HomeActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/HomeActivity.kt @@ -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("不允许返回操作") - } - } \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/dish/match/ui/InitActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/InitActivity.kt index 364adae..2bb41a3 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/InitActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/InitActivity.kt @@ -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) { + // 禁用返回键,不执行任何操作 + } } } \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/dish/match/ui/PrepareCookActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/PrepareCookActivity.kt index 298c66f..5f8ea9d 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/PrepareCookActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/PrepareCookActivity.kt @@ -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() 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() } /** diff --git a/app/src/main/java/com/shuwei/dish/match/ui/SamplingListActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/SamplingListActivity.kt index b33b4c0..28e81cd 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/SamplingListActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/SamplingListActivity.kt @@ -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 = mutableListOf() private val dishAdapter by lazy { SamplingAdapter(list = list).apply { diff --git a/app/src/main/java/com/shuwei/dish/match/ui/SelectDishActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/SelectDishActivity.kt index 3499b59..a1371db 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/SelectDishActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/SelectDishActivity.kt @@ -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() diff --git a/app/src/main/java/com/shuwei/dish/match/ui/SlaveActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/SlaveActivity.kt index 3b03a1b..0aee338 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/SlaveActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/SlaveActivity.kt @@ -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) { + // 禁用返回键,不执行任何操作 + } } /**