android 重新排列LazyColumn重新组合问题

fjnneemd  于 2022-12-09  发布在  Android
关注(0)|答案(1)|浏览(139)

我有一个LazyColumn,它从我的Room数据库中获取一个列表。
我正在创建一个按钮,它可以重新排列列表,从最新的开始,或从最旧的开始。我遇到的问题是,当我重新排列列表时,LazyColumns视图下降到LazyColumn的底部。我不希望列表视图在列表更改过程中更改。我正在使用列表的一个键,我怀疑问题来自这个键。当我禁用这个键时,这不是一个问题,但是,它有自己的问题,所以我不能永久禁用它。有没有人知道并容易修复这个问题?
我的组合-〉

@OptIn(ExperimentalFoundationApi::class)
@Composable
fun MainScreen(navController: NavController, notesViewModel: NotesViewModel) {

    val myUiState by notesViewModel.uiState.collectAsState()
    val multiDelete = remember { mutableStateListOf<Note>() }
    val scope = rememberCoroutineScope()
    val state = rememberLazyListState()

    Surface {
        Column {
            Row {
                FloatingActionButton(onClick = { notesViewModel.updateStates(true) }) {}

                FloatingActionButton(onClick = { notesViewModel.updateStates(false) }) {}

                NewNote(navController)
                if(multiDelete.isNotEmpty()){
                    FloatingActionButton(
                        onClick = {
                            scope.launch {
                                notesViewModel.deleteSelected(multiDelete)
                                delay(50)
                                multiDelete.clear()
                            }
                        }
                    ) { Image(imageVector = Icons.Filled.Delete, contentDescription = "this") }
                }
            }

            LazyColumn(
                state = state,
                horizontalAlignment = Alignment.CenterHorizontally,
                contentPadding = PaddingValues(vertical = 10.dp),
                verticalArrangement = Arrangement.spacedBy(10.dp),
                modifier = Modifier
                    .background(color = Color.Gray)
                    .fillMaxSize()
                    .focusRequester(FocusRequester()),

            ) {
                items(
                    if(myUiState.toggle) myUiState.allNotes else myUiState.allNotes.reversed(),
                    key = {notes -> notes.uid!!}
                ) {
                    notes ->
                    Column(
                        modifier = Modifier.animateItemPlacement()
                    ) {
                        ConsoleCards(
                            note = notes,
                            onDeleteClick = {
                                notesViewModel.delete(notes)
                            },
                            onLongPress = {
                                if(multiDelete.contains(notes)) multiDelete.remove(notes) else multiDelete.add(notes)
                            },
                            onEditClick = {
                                notesViewModel.uid(notes.uid!!)
                                notesViewModel.header(notes.header!!)
                                notesViewModel.note(notes.note!!)
                                navController.navigate(route = PageNav.AddNote.name)
                            }
                        )
                    }
                }
            }
        }
    }
}
6jjcrrmo

6jjcrrmo1#

这可能不是最好的解决办法,还有类似的问题

itemsIndexed(
    items = checkItems.sortedBy { it.checked.value },
    key = { index, item -> if (index == 0) index else item.id }
) { index, entry ->
    ...
}

相关问题