我想把观察到的LiveData放在一个列表中,而你把那个列表放在代码的其他地方。就像这样:
var listCategory = listOf<Category>()
categoryViewModel.categories.observe(viewLifecycleOwner) {
listCategory = it
}
//do something with listCategory
CategoryViewModel.kt
@HiltViewModel
class CategoryViewModel @Inject constructor(private val categoryDao: CategoryDao) :ViewModel() {
private val categoryFlow = categoryDao.getCategoryFlow()
val categories = categoryFlow.asLiveData()
fun addCategory(name:String){
viewModelScope.launch {
categoryDao.insert(Category(name = name))
}
}
}
CategoryDao.kt
@Dao
interface CategoryDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(category: Category)
@Update
suspend fun update(category: Category)
@Delete
suspend fun delete(category: Category)
@Query("SELECT * FROM category_table")
fun getCategoryFlow(): Flow<List<Category>>
}
但是listCategory总是空的,我如何使用观察块之外的观察数据呢?
1条答案
按热度按时间0x6upsns1#
您的
listCategory
具有List<Category>
类型,该类型是不可变的。它也被声明为val
,这意味着您不能合法地使用listCategory = something
。要允许突变和添加,您应该将其创建为如下的可变列表然后,在观察块中,您可以
此外,我建议对
observe
块中的livedata及其依赖组件执行操作,以确保livedata更改将得到处理。