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 187661b..5b77cb3 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 @@ -33,6 +33,7 @@ class InitActivity : BaseActivity() { } private lateinit var binding: ActivityInitBinding + private var hasNavigated = false // 防止 onResume 多次触发重复路由 private var startTime = 0L // 倒计时开始时间 private var lastNetworkCheckTime = 0L // 上次检测网络的时间 private val countdownHandler = Handler(Looper.getMainLooper()) @@ -92,6 +93,8 @@ class InitActivity : BaseActivity() { private fun startNextPage(withDelay: Boolean = false) { + if (hasNavigated) return + hasNavigated = true lifecycleScope.launch { if (withDelay) delay(2000) // 子设备:直接进入小屏专属页面,不走原有大屏业务流程 diff --git a/app/src/main/java/com/shuwei/dish/match/ui/PrepareFoodActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/PrepareFoodActivity.kt index 6562272..f6a737d 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/PrepareFoodActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/PrepareFoodActivity.kt @@ -31,6 +31,7 @@ import com.shuwei.dish.match.utils.SpTool import com.shuwei.dish.match.utils.WeightUtil import com.shuwei.dish.match.utils.ext.addOnActionSearchListener import com.shuwei.dish.match.utils.ext.clickWithDebounce +import com.shuwei.dish.match.utils.ext.dp import com.shuwei.dish.match.utils.ext.gone import com.shuwei.dish.match.utils.ext.startActivity import com.shuwei.dish.match.utils.ext.toJsonString @@ -417,18 +418,11 @@ class PrepareFoodActivity : BaseActivity() { return SwipeMenuItem(this).apply { setImage(R.drawable.ic_trash_white) setBackground(R.drawable.bg_swipe_delete) - width = dp2px(160) + width = 160.dp height = ViewGroup.LayoutParams.MATCH_PARENT } } - /** - * dp 转 px - */ - private fun dp2px(dp: Int): Int { - return (dp * resources.displayMetrics.density + 0.5f).toInt() - } - override fun onResume() { super.onResume() pageVisible = true @@ -615,6 +609,8 @@ class PrepareFoodActivity : BaseActivity() { startActivity(intent) { foodId = it?.getStringExtra(FoodSearchActivity.FOOD_ID) val name = it?.getStringExtra(FoodSearchActivity.FOOD_NAME) + Log.d(TAG, "jumpSearch: foodId=$foodId, name=$name") + if (name.isNullOrBlank()) return@startActivity binding.etInputDish.run { setText(name) tag = name diff --git a/app/src/main/java/com/shuwei/dish/match/ui/SamplingModeActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/SamplingModeActivity.kt index dd18ded..4832ed3 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/SamplingModeActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/SamplingModeActivity.kt @@ -165,22 +165,19 @@ class SamplingModeActivity : BaseActivity() { private val dishAdapter by lazy { FoodListAdapter(list = list, mode = FoodListAdapter.DisplayMode.SAMPLING_MODE).apply { isStateViewEnable = true - onItemClick = { position -> - judgeDeviceConfig { - onItemClick(position) - } + onItemClick = onItemClick@{ position -> + // 在点击时立即捕获 item,避免协程挂起期间 list 刷新导致越界 + val item = list.getOrNull(position) ?: return@onItemClick + judgeDeviceConfig { onItemClick(item) } } } } - private fun onItemClick(position: Int) { - val item = list[position] + private fun onItemClick(item: FoodRecord) { if (item.isCooking) { - //烹饪中,跳到称熟重页面 + // 烹饪中,跳到称熟重页面 startActivity { - putExtra( - SubmitFoodActivity.FOOD_ITEM, item as Serializable - ) + putExtra(SubmitFoodActivity.FOOD_ITEM, item as Serializable) } return } @@ -221,7 +218,9 @@ class SamplingModeActivity : BaseActivity() { } // item 点击事件 setOnItemClickListener { _, position -> - judgeDeviceConfig { onItemClick(position) } + // 在点击时立即捕获 item,避免协程挂起期间 list 刷新导致越界 + val item = list.getOrNull(position) ?: return@setOnItemClickListener + judgeDeviceConfig { onItemClick(item) } } adapter = dishAdapter } diff --git a/app/src/main/java/com/shuwei/dish/match/ui/fragment/DishListFragment.kt b/app/src/main/java/com/shuwei/dish/match/ui/fragment/DishListFragment.kt index fa89c14..cd64674 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/fragment/DishListFragment.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/fragment/DishListFragment.kt @@ -23,6 +23,7 @@ import com.shuwei.dish.match.net.UiState import com.shuwei.dish.match.ui.CookingModeActivity import com.shuwei.dish.match.ui.PrepareFoodActivity import com.shuwei.dish.match.ui.SubmitFoodActivity +import com.shuwei.dish.match.utils.ext.dp import com.shuwei.dish.match.utils.ext.startActivity import com.shuwei.dish.match.utils.ext.toast import com.yanzhenjie.recyclerview.SwipeMenuItem @@ -140,15 +141,11 @@ class DishListFragment : BaseFragment() { return SwipeMenuItem(context).apply { setImage(R.drawable.ic_trash_white) setBackground(R.drawable.bg_swipe_delete) - width = dp2px(context, 160) + width = 160.dp height = ViewGroup.LayoutParams.MATCH_PARENT } } - private fun dp2px(context: Context, dp: Int): Int { - return (dp * context.resources.displayMetrics.density + 0.5f).toInt() - } - /** * 用 combine 同时监听网络结果与本地数据,网络成功时统一合并渲染 * pageNo > 1(加载更多)时 cookFoodListState 不参与合并,直接追加网络数据