LazyColumn 通知项目的修改
Posted
技术标签:
【中文标题】LazyColumn 通知项目的修改【英文标题】:LazyColumn notify about modification of item 【发布时间】:2021-11-07 20:31:06 【问题描述】:我有一个看起来像这样的可组合函数:
@Composable
fun listScreen(context: Context, owner: ViewModelStoreOwner)
val repository = xRepository(getAppDatabase(context).xDao()
val listData by repository.readAllData.observeAsState(emptyList())
// repository.readAllData returns LiveData<List<xEntity>>
// listData is a List<xEntity>
LazyColumn()
items(listData.size)
Card
Text(listData[it].name)
Text(listData[it].hoursLeft.toString())
Button(onClick = updateInDatabase(owner, name = listData[it], hoursLeft = 12)) ...
fun updateInDatabase(owner: ViewModelStoreOwner, name: String, hoursLeft: Int)
val xViewModel....
val newEntity = xEntity(name=name, hoursLeft = Int)
xViewModel.update(newEntity)
正如您可能猜到的那样,LazyColumn 在修改实体后不会刷新,有没有办法在每次更新实体后更新 listData?
编辑:
class xRepository(private val xDatabaseDao)
val readAllData: LiveData<List<xEntity>> = xDatabaseDao.getallXinfo()
...
suspend fun updatePlant(x: xEntity)
plantzDao.updateX(x)
interface xDatabaseDao
@Query("SELECT * FROM xInfo ORDER BY id DESC")
fun getAllXInfo(): LiveData<List<xEntity>>
....
@Update(onConflict = OnConflictStrategy.REPLACE)
suspend fun updateX(x: xEntity?)
实体修改:
fun updatePlantInDatabase(owner: ViewModelStoreOwner, name: String, waterAtHour: Int, selectedDays: ArrayList<Int>)
val xViewModel: xViewModel = ViewModelProvider(owner).get(xViewModel::class.java)
val new = xEntity(name = name, waterAtHour = waterAtHour, selectedDays = selectedDays)
xViewModel.updatePlant(new)
【问题讨论】:
为什么你的TextField
只有一个参数,是只读的?显示readAllData
以及您如何修改数据
1.我的错误,没有文本字段,我的意思是文本 2。我将使用有关 readAllData 和修改的信息更新帖子
我仍然不知道你的xViewModel
是如何连接到repository.readAllData
的,以及为什么它会触发重组
基本上我唯一想做的就是在修改其中一个实体后“刷新”包含有关 xEntities 的所有信息的列表
从撰写的角度来看你做得很好,看看为什么你的readAllData
在数据库更新后没有更新LiveData
的值
【参考方案1】:
如果您想更新惰性列(比如在 jetpack compose 中重新组合),请使用副作用。 当列表更改副作用时,将列表获取功能置于副作用(启动效果或其他副作用)中,自动重组您的功能并显示更新的列表。
【讨论】:
以上是关于LazyColumn 通知项目的修改的主要内容,如果未能解决你的问题,请参考以下文章
Element中(Notification)通知组件字体修改(Vue项目中Element的Notification修改字体)