【问题标题】:Lazycolumn does not update when deleting an item删除项目时延迟列不更新
【发布时间】:2022-11-07 17:20:25
【问题描述】:

我正在尝试从 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 中的项目 类更新。

【问题讨论】:

    标签: android kotlin android-jetpack-compose lazycolumn compose-recomposition


    【解决方案1】:

    如果您希望您的可组合更新列表更改,请使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多