提问人:Илья Жиленков 提问时间:11/13/2023 更新时间:11/13/2023 访问量:45
在状态更改时更新单个 LazyColumn 项
Updating a single LazyColumn item on state changes
问:
我需要在我的项目中显示最喜欢的会话,但是如果收藏夹会话列出了 cahnges,要更新我需要向下滚动的内容,而顶部完全消失,然后返回我的.LazyRow
LazyColumn
LazyRow
LazyRow
LazyRow
这是我的代码:
@Composable
fun SessionsScreen(onSessionClick: (Session) -> Unit, viewModel: SessionsViewModel =
hiltViewModel()) {
val sessionsStateFlow by viewModel.sessionsStateFlow.collectAsState()
val favouriteStateFlow by viewModel.favouritesStateFlow.collectAsState()
LazyColumn(
modifier = Modifier
.padding(horizontal = 20.dp)
.fillMaxSize()
) {
favourite(favouriteStateFlow)
}
}
fun LazyListScope.favourite(favouritesState: List<Session>) {
item {
LazyRow {
if (favouritesState.isEmpty()) {
item { Text(text = stringResource(id = R.string.no_favourites)) }
}
items(favouritesState) {
Favourite(it)
}
}
}
}
答:
0赞
NewPartizal
11/13/2023
#1
若要在收藏夹会话列表更改时更新 LazyRow 中的内容,应使用 items 函数中的 key 参数。这确保了 Compose 可以区分不同的项目并正确更新它们。
@Composable
fun SessionsScreen(onSessionClick: (Session) -> Unit, viewModel: SessionsViewModel = hiltViewModel()) {
val sessionsStateFlow by viewModel.sessionsStateFlow.collectAsState()
val favouriteStateFlow by viewModel.favouritesStateFlow.collectAsState()
LazyColumn(
modifier = Modifier
.padding(horizontal = 20.dp)
.fillMaxSize()
) {
favourite(favouriteStateFlow)
}
}
fun LazyListScope.favourite(favouritesState: List<Session>) {
item {
LazyRow {
if (favouritesState.isEmpty()) {
item { Text(text = stringResource(id = R.string.no_favourites)) }
}
items(favouritesState) { session ->
Favourite(session, key = session.id) {
// Add any interaction logic here
}
}
}
}
}
@Composable
fun Favourite(session: Session, onClick: () -> Unit) {
// Your Favourite item composable content here
// For example:
Box(
modifier = Modifier
.padding(8.dp)
.clickable { onClick() }
) {
Text(text = session.title)
}
}
评论
0赞
Илья Жиленков
11/13/2023
这并不能解决我的问题,因为它为 的函数提供了键,问题是不要更新作为根的项目LazyRow
items
LazyColumn
fun LazyListScopre.favourites()
评论
favouriteStateFlow
viewModel
favouritesStateFlow