fix(activity): 修复采样页越界崩溃、重复路由及搜索返回清空输入框问题
This commit is contained in:
@@ -33,6 +33,7 @@ class InitActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private lateinit var binding: ActivityInitBinding
|
private lateinit var binding: ActivityInitBinding
|
||||||
|
private var hasNavigated = false // 防止 onResume 多次触发重复路由
|
||||||
private var startTime = 0L // 倒计时开始时间
|
private var startTime = 0L // 倒计时开始时间
|
||||||
private var lastNetworkCheckTime = 0L // 上次检测网络的时间
|
private var lastNetworkCheckTime = 0L // 上次检测网络的时间
|
||||||
private val countdownHandler = Handler(Looper.getMainLooper())
|
private val countdownHandler = Handler(Looper.getMainLooper())
|
||||||
@@ -92,6 +93,8 @@ class InitActivity : BaseActivity() {
|
|||||||
|
|
||||||
|
|
||||||
private fun startNextPage(withDelay: Boolean = false) {
|
private fun startNextPage(withDelay: Boolean = false) {
|
||||||
|
if (hasNavigated) return
|
||||||
|
hasNavigated = true
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
if (withDelay) delay(2000)
|
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.WeightUtil
|
||||||
import com.shuwei.dish.match.utils.ext.addOnActionSearchListener
|
import com.shuwei.dish.match.utils.ext.addOnActionSearchListener
|
||||||
import com.shuwei.dish.match.utils.ext.clickWithDebounce
|
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.gone
|
||||||
import com.shuwei.dish.match.utils.ext.startActivity
|
import com.shuwei.dish.match.utils.ext.startActivity
|
||||||
import com.shuwei.dish.match.utils.ext.toJsonString
|
import com.shuwei.dish.match.utils.ext.toJsonString
|
||||||
@@ -417,18 +418,11 @@ class PrepareFoodActivity : BaseActivity() {
|
|||||||
return SwipeMenuItem(this).apply {
|
return SwipeMenuItem(this).apply {
|
||||||
setImage(R.drawable.ic_trash_white)
|
setImage(R.drawable.ic_trash_white)
|
||||||
setBackground(R.drawable.bg_swipe_delete)
|
setBackground(R.drawable.bg_swipe_delete)
|
||||||
width = dp2px(160)
|
width = 160.dp
|
||||||
height = ViewGroup.LayoutParams.MATCH_PARENT
|
height = ViewGroup.LayoutParams.MATCH_PARENT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* dp 转 px
|
|
||||||
*/
|
|
||||||
private fun dp2px(dp: Int): Int {
|
|
||||||
return (dp * resources.displayMetrics.density + 0.5f).toInt()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
pageVisible = true
|
pageVisible = true
|
||||||
@@ -615,6 +609,8 @@ class PrepareFoodActivity : BaseActivity() {
|
|||||||
startActivity(intent) {
|
startActivity(intent) {
|
||||||
foodId = it?.getStringExtra(FoodSearchActivity.FOOD_ID)
|
foodId = it?.getStringExtra(FoodSearchActivity.FOOD_ID)
|
||||||
val name = it?.getStringExtra(FoodSearchActivity.FOOD_NAME)
|
val name = it?.getStringExtra(FoodSearchActivity.FOOD_NAME)
|
||||||
|
Log.d(TAG, "jumpSearch: foodId=$foodId, name=$name")
|
||||||
|
if (name.isNullOrBlank()) return@startActivity
|
||||||
binding.etInputDish.run {
|
binding.etInputDish.run {
|
||||||
setText(name)
|
setText(name)
|
||||||
tag = name
|
tag = name
|
||||||
|
|||||||
@@ -165,22 +165,19 @@ class SamplingModeActivity : BaseActivity() {
|
|||||||
private val dishAdapter by lazy {
|
private val dishAdapter by lazy {
|
||||||
FoodListAdapter(list = list, mode = FoodListAdapter.DisplayMode.SAMPLING_MODE).apply {
|
FoodListAdapter(list = list, mode = FoodListAdapter.DisplayMode.SAMPLING_MODE).apply {
|
||||||
isStateViewEnable = true
|
isStateViewEnable = true
|
||||||
onItemClick = { position ->
|
onItemClick = onItemClick@{ position ->
|
||||||
judgeDeviceConfig {
|
// 在点击时立即捕获 item,避免协程挂起期间 list 刷新导致越界
|
||||||
onItemClick(position)
|
val item = list.getOrNull(position) ?: return@onItemClick
|
||||||
}
|
judgeDeviceConfig { onItemClick(item) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onItemClick(position: Int) {
|
private fun onItemClick(item: FoodRecord) {
|
||||||
val item = list[position]
|
|
||||||
if (item.isCooking) {
|
if (item.isCooking) {
|
||||||
//烹饪中,跳到称熟重页面
|
// 烹饪中,跳到称熟重页面
|
||||||
startActivity<SubmitFoodActivity> {
|
startActivity<SubmitFoodActivity> {
|
||||||
putExtra(
|
putExtra(SubmitFoodActivity.FOOD_ITEM, item as Serializable)
|
||||||
SubmitFoodActivity.FOOD_ITEM, item as Serializable
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -221,7 +218,9 @@ class SamplingModeActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
// item 点击事件
|
// item 点击事件
|
||||||
setOnItemClickListener { _, position ->
|
setOnItemClickListener { _, position ->
|
||||||
judgeDeviceConfig { onItemClick(position) }
|
// 在点击时立即捕获 item,避免协程挂起期间 list 刷新导致越界
|
||||||
|
val item = list.getOrNull(position) ?: return@setOnItemClickListener
|
||||||
|
judgeDeviceConfig { onItemClick(item) }
|
||||||
}
|
}
|
||||||
adapter = dishAdapter
|
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.CookingModeActivity
|
||||||
import com.shuwei.dish.match.ui.PrepareFoodActivity
|
import com.shuwei.dish.match.ui.PrepareFoodActivity
|
||||||
import com.shuwei.dish.match.ui.SubmitFoodActivity
|
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.startActivity
|
||||||
import com.shuwei.dish.match.utils.ext.toast
|
import com.shuwei.dish.match.utils.ext.toast
|
||||||
import com.yanzhenjie.recyclerview.SwipeMenuItem
|
import com.yanzhenjie.recyclerview.SwipeMenuItem
|
||||||
@@ -140,15 +141,11 @@ class DishListFragment : BaseFragment<FragmentDishListBinding>() {
|
|||||||
return SwipeMenuItem(context).apply {
|
return SwipeMenuItem(context).apply {
|
||||||
setImage(R.drawable.ic_trash_white)
|
setImage(R.drawable.ic_trash_white)
|
||||||
setBackground(R.drawable.bg_swipe_delete)
|
setBackground(R.drawable.bg_swipe_delete)
|
||||||
width = dp2px(context, 160)
|
width = 160.dp
|
||||||
height = ViewGroup.LayoutParams.MATCH_PARENT
|
height = ViewGroup.LayoutParams.MATCH_PARENT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun dp2px(context: Context, dp: Int): Int {
|
|
||||||
return (dp * context.resources.displayMetrics.density + 0.5f).toInt()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用 combine 同时监听网络结果与本地数据,网络成功时统一合并渲染
|
* 用 combine 同时监听网络结果与本地数据,网络成功时统一合并渲染
|
||||||
* pageNo > 1(加载更多)时 cookFoodListState 不参与合并,直接追加网络数据
|
* pageNo > 1(加载更多)时 cookFoodListState 不参与合并,直接追加网络数据
|
||||||
|
|||||||
Reference in New Issue
Block a user