android - 在 Android 中使用 Shared ViewModel 在不同 ViewModel 之间共享数据

标签 android mvvm

我有多个 fragment ,每个 fragment 都有不同的 ViewModel .现在我想避免在我的 Fragments 之间传递数据作为参数。而是使用 SharedViewModel在我的 Viewmodels 之间并以某种方式继承Sharedviewmodel更新我的数据状态。有什么帮助吗?

最佳答案

ViewModel 继承可能是错误的工具,因为 ViewModel 被设计为与特定 Fragment 或 Activity 的生命周期相关联。更好的方法是拥有一个真正的“模型”类来管理各个 ViewModel 与之交互的持久数据状态(单例或其他)。例如:

class Database {

    private static Database instance = null;

    public static synchronized Database getInstance() {
        if( instance == null ) {
            instance = new Database();
        }
        return instance;
    }

    private Database() {}

    private int mValue = 0;
    public void setValue(int v) { mValue = v; }
    public int getValue() { return mValue; }
}


class FragmentAViewModel extends ViewModel {

    private final Database db;

    FragmentAViewModel() {
        db = Database.getInstance();
    }

    // FragmentA can set and get state on Database as needed
    void setValue(int v) {
        db.setValue(v);
    }
}

class FragmentBViewModel extends ViewModel {

    private final Database db;

    FragmentBViewModel() {
        db = Database.getInstance();
    }

    // FragmentB can set and get state on Database as needed
    int getValue() {
        return db.getValue();
    }
}

另一种选择是创建一个 Activity 级别的 ViewModel。如果所有 fragment 都在同一个 Activity 中,它们可以共享该 Activity View 模型。例如:
mFragmentViewModel = ViewModelProviders.of(this).get(FragmentViewModel.class);

MainActivity a = (MainActivity)requireActivity();
mActivityViewModel = ViewModelProviders.of(a).get(MainActivityViewModel.class);

关于android - 在 Android 中使用 Shared ViewModel 在不同 ViewModel 之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60584377/

相关文章:

java - 在 Android 中使用 CustomMultiPartEntity 取消上传文件

android - 引导完成广播不起作用

javascript - knockout 中级联主从和加载记录。 js

c# - 缺乏初始化 View 模型的知识

android - Bluez 架构 : Explain this Architecture

android - 将上下文传递给非 Activity 类的最佳实践?

android - 返回语句后触发OnCompleteListener

wpf - 用于添加新实体的 MVVM WPF ViewModels

wpf - 关于 MVVM 模式和 GUI 中 XAML 动态加载的困惑

java - Android JSON 解析器