android - 如何使一个 ViewModel 类向 Activity 或 fragment 返回多种数据类型

标签 android firebase firebase-realtime-database android-architecture-components android-viewmodel

我正在阅读这篇博文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/

相关文章:

android - 在 Android 上创建自定义 View 时在绘制时出现空指针错误?

javascript - Android中的Promise,如何实现?

android - 如何设置 Android MaterialCalendars 各种组件的样式

android - 开始运行,我的按钮不再响应

javascript - 将数据推送到具有相同 id 的两个不同节点

sql - 如何计算 Firebase Analytics 原始数据中的 session 和 session 持续时间?

android - Firebase - 电子邮件验证邮件不工作 - 发生内部错误。 [ USER_NOT_FOUND ]

java - Android - Firebase - 无法将 java.util.HashMap 类型的值转换为字符串

javascript - 如何从 firebase 在 Push Key 上添加数据?

android - 如何检查手机上的响应式用户界面?