refactor(activity): 统一使用 onBackPressedDispatcher.addCallback 替代 onBackPressed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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() {
|
|
||||||
// 禁用返回键,不执行任何操作
|
// 禁用返回键,不执行任何操作
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user