我在LazyColumn中有一个文件列表。用户可以在列表中选择多个文件。我有一个按钮浮动在那个列表上。该按钮的文本是“存档n个文件”(其中n是在列表中选定的文件数)我希望该按钮的文本更改每次文件在列表中选择或取消选择。
我使用包含所选文件的MutableState
selections = rememberSaveable { mutableStateOf(mutableListOf()) }
当用户单击显示列表中的文件时,我会在selections
中添加或删除一个条目
if (row.isSelectedState.value) {
selections.value.add(row.idConversation)
} else {
selections.value.remove(row.idConversation)
}
在按钮文本中使用selections
的大小
text =
if (selections.value.size == 0)
"Archive"
else
String.format("Archive %1$d conversations", selections.value.size)
问题是,当我们在selections
中添加或删除项目时,按钮的文本不会改变,基于selections.value.size
的重组不会触发。
我通过使用另一个状态修复了此问题
selectionCount = rememberSaveable { mutableStateOf(selections.value.size) }
text =
if (selectionCount.value == 0)
"Archive"
else
String.format("Archive %1$d conversations", selectionCount.value)
并在每次添加或删除selections
中的项时更新此状态
if (row.isSelectedState.value) {
selections.value.add(row.idConversation)
} else {
selections.value.remove(row.idConversation)
}
selectionCount.value = selections.value.size
但是我不喜欢这个解决方案,因为我必须维护另一个状态,并且在将来的代码中,当我们在selections
中添加或删除项目时,可能会忘记更新它
在selections
中添加/删除项目后,我可以做些什么来触发按钮的重组?
1条答案
按热度按时间0h4hbjxa1#
将选择列表创建为
创建一个变量来保存大小
这个LaunchedEffect块将在每次选择时执行。size改变,在任何你想显示它的地方使用size变量。