我正在try 从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中的项会更新 类更新.

推荐答案

如果希望您的Composable根据列表更改进行更新,请使用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

Android相关问答推荐

如何将Hilt添加到Android Studio中的Kotlin项目中?

如何使TextField的背景透明?

泛型类型lambda函数参数作为函数参数

如何在Android Studio中将我的Java-库&库设置为Kotlin库

在内部创建匿名对象的繁忙循环调用函数会产生开销吗?

Jetpack Compose-如何在进入新产品线之前删除单词?

如何在DownloadManager Android中显示ProgressBar和Complete Listener

触发PurchasesUpdatedListener回调时,billingClient.launchBillingFlow之前设置的成员变量丢失

Play store 的 Play 完整性与 Firebase 应用判断 Play 完整性

Android 构建失败:找不到 flexbox2.0.1.aar

我如何比较多个时间范围并在 Android Compose 中并排显示它们

获取 ArithmeticException:除以零,但我没有在任何地方除以零

协程中的 Job.Cancel 与 Scope.Cancel 有什么区别?

java.lang.IllegalArgumentException:与请求匹配的导航目的地 NavDeepLinkRequest

如何修复 api 调用在浏览器中工作但在 android studio 中为 403

为什么按钮没有拉伸到屏幕边缘?

在开发过程中我应该把 mp4 文件放在哪里?

Android - 水平(从右到左)圆形背景 colored颜色 过渡

现代Android中的后台处理

如何删除 Ktor 客户端 2.0.0 的默认标头