fix(activity): 修复采样页越界崩溃、重复路由及搜索返回清空输入框问题
This commit is contained in:
@@ -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)
|
||||
// 子设备:直接进入小屏专属页面,不走原有大屏业务流程
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<SubmitFoodActivity> {
|
||||
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
|
||||
}
|
||||
|
||||
@@ -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<FragmentDishListBinding>() {
|
||||
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 不参与合并,直接追加网络数据
|
||||
|
||||
Reference in New Issue
Block a user