【发布时间】:2021-08-06 04:14:35
【问题描述】:
在 LiveData 和 MVVM 架构方面,我完全是个新手。我试图弄清楚如何观察 ViewModel 中的 LiveData 以根据它是否为空来更新另一个变量。
我正在从我的 Room 数据库中获取 LiveData:
class MealsViewModel @Inject constructor(
private val mealDao : MealDao
) : ViewModel() {
...
private val currentDay: MutableLiveData<Date> = MutableLiveData(Date())
val meals = Transformations.switchMap(currentDay){ date -> mealDao.getMeals(date).asLiveData() }
我希望 ViewModel 中的另一个变量 private val empty: Boolean 在列表返回空(null)时进行更新。这将用于将 Fragment 中的 ImageView 从 Visible.GONE 更新为 Visible.VISIBLE。
如何同步检查val meals是否为空?
我已经阅读并看到有人说要使用observeForever,但架构指南明确建议不要在 ViewModels 中使用任何观察者。
我可能会在 Fragment 中观察 LiveData,但这需要 Fragment 中的业务逻辑,即:
viewModel.meals.observe(viewLifecycleOwner) {
if meals.value.isEmpty() imageView.visibility = View.VISIBLE else imageView.visibility = View.GONE
}
而且我想让 Fragment 尽可能“愚蠢”,所以我更愿意在 ViewModel 中使用这种逻辑。这可能吗?
【问题讨论】:
标签: android mvvm android-livedata