我正在尝试从Lazycolumn中删除一个项目。这是我的代码:
MyViewModel.kt:
class MyViewModel:ViewModel() {
val items = MutableLiveData<List<Items>>()
fun removeItem(item: Items) {
items.value = items.value?.filter { it != item }?.toList()
}
MainActivity.kt:
class MainActivity : ComponentActivity() {
@ExperimentalFoundationApi
@SuppressLint("UnusedMaterialScaffoldPaddingParameter")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val viewmodel = ViewModelProvider(this).get(MyViewModel::class.java)
setContent {
JetPackAppTheme {
val list = Mylist()
val getData = list.getData()
viewmodel.items.value=getData
LazyColumn(
verticalArrangement = Arrangement.spacedBy(12.dp),
contentPadding = PaddingValues(all=16.dp),
) {
items(items = viewmodel.items.value!!) { item->
CustomItem(item = item,
onItemClick = {
viewmodel.removeItem(it)
}
}
}
}
}
问题是LazyColumn不更新,而是MyViewModel类更新中的项。
发布于 2022-10-20 17:45:09
如果想要对列表更改进行可组合更新,则使用SnapshotStateList
而不是MutableList
class MyViewModel:ViewModel() {
val items = MutableLiveData<SnapshotStateList<Items>>()
fun removeItem(item: Items) {
items.value?.remove(item)
}
}
您可以像实例化普通列表一样创建SnapshotStateList
实例。
val stateList = mutableStateListOf<Item>(...)
这里的示例中也不需要LiveData
,只需创建一个SnapshotStateList
实例即可
class MyViewModel:ViewModel() {
val items = mutableStateListOf( <your items here> )
fun removeItem(item: Items) {
items.value?.remove(item)
}
}
,然后简单地从可组合的
LazyColumn {
items(items = viewmodel.items) { item->
CustomItem(item = item,
onItemClick = {
viewmodel.removeItem(it)
}
}
}
看看这个类似的帖子Jetpack Compose: LazyColumn not updating with MutableList
https://stackoverflow.com/questions/74144053
复制相似问题