避免意外重复点击 Any btn 的最佳方法是什么?
What is the best way to avoid accidental repeated clicks on Any btn?
我的问题是不小心重复点击了 LazyVerticalGrid 元素,解决方法是:
var enabled by rememberSaveable { mutableStateOf(true) }
和 val scope = LocalLifecycleOwner.current.lifecycleScope
.
LazyVerticalGrid(
state = lazyVGState,
cells = GridCells.Fixed(3),
contentPadding = PaddingValues(bottom = 100.dp)
) {
items(groupMap.keys.toList().sorted()) { item ->
Column(
modifier = Modifier.clickable(
enabled = enabled,
) {
enabled = false
navController.currentBackStackEntry?.savedStateHandle?.set(
CITY_WEATHER_LIST,
cityList
)
navController.navigate(Screen.CityForecastScreen.route)
scope.launchWhenStarted {
delay(10)
enabled = true
}
},
) {
// some elements
}
}
}
如果我不使用启用状态,用户可能会打开一个元素几次。
寻找社区意见。
谢谢。
fun NavController.safeNavigate(direction: NavDirections) {
currentDestination?.getAction(direction.actionId)?.run { navigate(direction) }
}
而不是 navController.navigate
,使用具有相同参数的 navController.safeNavigate
。
导航框架在您的应用程序中提供导航状态的最新和同步视图,因此防止多次点击的最安全方法是检查您是否仍在托管 LazyList 的导航目标中使用
navController.currentDestination
并将其与 LazyList 屏幕标识符进行比较。
我的问题是不小心重复点击了 LazyVerticalGrid 元素,解决方法是:
var enabled by rememberSaveable { mutableStateOf(true) }
和 val scope = LocalLifecycleOwner.current.lifecycleScope
.
LazyVerticalGrid(
state = lazyVGState,
cells = GridCells.Fixed(3),
contentPadding = PaddingValues(bottom = 100.dp)
) {
items(groupMap.keys.toList().sorted()) { item ->
Column(
modifier = Modifier.clickable(
enabled = enabled,
) {
enabled = false
navController.currentBackStackEntry?.savedStateHandle?.set(
CITY_WEATHER_LIST,
cityList
)
navController.navigate(Screen.CityForecastScreen.route)
scope.launchWhenStarted {
delay(10)
enabled = true
}
},
) {
// some elements
}
}
}
如果我不使用启用状态,用户可能会打开一个元素几次。 寻找社区意见。 谢谢。
fun NavController.safeNavigate(direction: NavDirections) {
currentDestination?.getAction(direction.actionId)?.run { navigate(direction) }
}
而不是 navController.navigate
,使用具有相同参数的 navController.safeNavigate
。
导航框架在您的应用程序中提供导航状态的最新和同步视图,因此防止多次点击的最安全方法是检查您是否仍在托管 LazyList 的导航目标中使用
navController.currentDestination
并将其与 LazyList 屏幕标识符进行比较。