我正在阅读这篇博文Using Android Architecture Components with Firebase Realtime Database (Part 2) 我正在实现最后一个代码 fragment 及其工作原理。
private final FirebaseQueryLiveData liveData = new FirebaseQueryLiveData(HOT_STOCK_REF);
private final MediatorLiveData<HotStock> hotStockLiveData = new MediatorLiveData<>();
public HotStockViewModel() {
// Set up the MediatorLiveData to convert DataSnapshot objects into HotStock objects
hotStockLiveData.addSource(liveData, new Observer<DataSnapshot>() {
@Override
public void onChanged(@Nullable final DataSnapshot dataSnapshot) {
if (dataSnapshot != null) {
new Thread(new Runnable() {
@Override
public void run() {
hotStockLiveData.postValue(dataSnapshot.getValue(HotStock.class));
}
}).start();
} else {
hotStockLiveData.setValue(null);
}
}
});
}
我实际上使用它返回一个包含在 LiveData 中的 HotStockViewModel 对象数组(通过循环访问数据库的结果,我真的不知道是否应该在 ViewModel 类中执行此数据操作)并返回数组到一个只显示它的 fragment 。
是否可以使用同一个 ViewModel 类返回仅包含 LiveData 中包含的价格的数组(并且仍然返回 LiveData 中包含的 HotStockViewModel 对象的数组)?
如果是的话,我怎样才能实现这个目标?我不想返回包含在 LiveData 中的 HotStockViewModel 对象数组,然后循环遍历它以获取 fragment 中的价格。我根本不希望 fragment 进行任何数据操作,只显示数据。
我看到了这个 stackoverflow 问题 Can an Android Architecture Components ViewModel compose an object from multiple LiveData returning models?但我不明白答案。我还是一个 Java 初学者。
最佳答案
and I really don't know if I should be doing this data manipulation in a ViewModel class
在我认为您正在使用的 Android MVVM 模式中,不建议在 Viewmodel 类中执行数据操作。而是创建一个应该处理这个问题的存储库类。 viewModel 类应该只从 repo 类获取数据,然后将其传递给需要它的任何 UI 组件。
关于android - 如何使一个 ViewModel 类向 Activity 或 fragment 返回多种数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50999751/