将MutableLiveData与复杂的对象和集合一起使用

时间:2020-10-24 00:51:06

标签: java android observable android-livedata

阅读完Android文档和其他有关LiveData的文章后, 我知道它的主要好处是它的状态感知。

对于简单的对象(例如字符串),这个概念可能非常好, 但我想知道为什么建议将其用于复杂类型或集合。

由于列表可以轻松修改而无需触发任何通知(因为该列表只是LiveData-Object内部的引用), 我认为这很容易出错,需要执行其他步骤。

例如:

...
List<String> list = new ArrayList<>();
MutableLiveData<String> mld = new MutableLiveData<>();
mld.setValue(list);

...
// probably some other Class/Method...
List<String> sameList = mld.getValue();
// won't trigger any notification but changes the initial list
sameList.add("Some String");

// needed to trigger notification:
mld.setValue(sameList);

像实现Observer-Pattern那样拥有一个接口(或至少两个接口),以便在触发任何更改操作时能够通知观察对象,会更好吗?只是具有额外的状态意识?

除非没有实现列表接口的列表类型,否则这首先对列表示例没有帮助,但是如果编写的模型类基本上在列表上提供特殊说明,这将使我认为更有意义。 该模型本身可以具有设计合理的逻辑,并可以为每次修改强制执行通知。

只要通知将其自身用作观察者,调用类就不必关心何时触发通知。

LiveData基本上是为与其他库中的预定义类一起使用而设计的,以便无需修改现有代码,而只需将LiveData用作包装器并决定何时手动更新?

或者只是扩展LiveData类并在其中添加功能是否更常见?

使用Kotlin,似乎可以只编写扩展功能,如此处所述: Refreshing MutableLiveData of list of items

但这意味着必须为现有模型中存在的每个函数编写包装函数。对于面向方面的编程,这可能是可行的。

0 个答案:

没有答案