LiveData-观察列表中的对象

时间:2018-08-28 12:32:56

标签: android android-livedata android-viewmodel

我有一个Functions列表,该列表是使用Room从本地SQLite数据库中检索的,我想观察该列表中的每个函数。目前,我正在执行以下操作:

public List<MutableLiveData<Function>> getLiveFunctions() {
    if (liveFunctions == null) {
        liveFunctions = new ArrayList<>();
        for (Function function : functions) {
            //Livedata with a default value on background thread (postValue)
            liveFunctions.add(new DefaultLiveData<>(function, true));
        }
    }
    return liveFunctions;
}

从数据库中本地获取后,我可以使用RPC请求到服务器的给定功能的状态。收到响应后,可以为该功能设置新值,并希望UI观察该功能的变化。

请澄清一下

  1. LiveData<List<Function>>>List<LiveData<Function>>之间的区别在于,第一个只会观察列表中是否添加,更新或删除了对象,对吗?并不是LiveData<List<Function>>>也在听他们物品的变化吗?

  2. 我正在使用MediatorLiveData将观察者组合到“ FunctionObserver”。这是处理我所有函数回调的正确方法吗?

[代码]

MediatorLiveData<LiveData<Function>> mediator = new MediatorLiveData<>();
List<MutableLiveData<Function>> functions = //functions
for (LiveData<Function> function : functions) {
    mediator.addSource(function, functionObserver);
}

mediator.observe(MainActivity.this, new Observer<LiveData<Function>>() {
    @Override
    public void onChanged(@Nullable LiveData<Function> functionLiveData) {
        Log.i(TAG, "Live data change: ");
    }
});
  1. 我的代码逻辑可以改进吗?我知道我可以从Room请求一个LiveData<List<Function>>>,但是我的父类有一个@Relation批注,而该批注的类型必须是ListSet (而不是LiveData)

0 个答案:

没有答案