首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在删除项时,Lazycolumn不更新

在删除项时,Lazycolumn不更新
EN

Stack Overflow用户
提问于 2022-10-20 17:31:41
回答 1查看 96关注 0票数 4

我正在尝试从Lazycolumn中删除一个项目。这是我的代码:

MyViewModel.kt:

代码语言:javascript
运行
复制
class MyViewModel:ViewModel() {

    val items = MutableLiveData<List<Items>>()

    fun removeItem(item: Items) {
        items.value = items.value?.filter { it != item }?.toList()
    }

MainActivity.kt:

代码语言:javascript
运行
复制
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类更新中的项。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-20 17:45:09

如果想要对列表更改进行可组合更新,则使用SnapshotStateList而不是MutableList

代码语言:javascript
运行
复制
class MyViewModel:ViewModel() {

    val items = MutableLiveData<SnapshotStateList<Items>>()

    fun removeItem(item: Items) {
        items.value?.remove(item)
    }
}

您可以像实例化普通列表一样创建SnapshotStateList实例。

代码语言:javascript
运行
复制
val stateList = mutableStateListOf<Item>(...)

这里的示例中也不需要LiveData,只需创建一个SnapshotStateList实例即可

代码语言:javascript
运行
复制
class MyViewModel:ViewModel() {

    val items = mutableStateListOf( <your items here> )

    fun removeItem(item: Items) {
        items.value?.remove(item)
    }
}

,然后简单地从可组合的

代码语言:javascript
运行
复制
LazyColumn {
       items(items = viewmodel.items) { item->
             CustomItem(item = item,
                 onItemClick = {
                    viewmodel.removeItem(it)
                 }
        }
}

看看这个类似的帖子Jetpack Compose: LazyColumn not updating with MutableList

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74144053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档