从 LiveData 插入(或删除)单个列表项
Insert (or delete) single List item from LiveData
我想知道,从 LiveData
中插入(或删除)单个 List
项目有哪些常见做法?
目前,这是我打算做的事情。
我有以下LiveData
LiveData<List<Animal>> animalListLiveData;
这就是我打算观察它的方式。
animalListLiveData.observe(this, animalList -> {
if (listView.getAdapter() == null) {
// First time.
ArrayAdapter<String> adapter = new ArrayAdapter<>(..., animalList);
// Assign adapter to ListView
listView.setAdapter(adapter);
} else {
// Update operation.
DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new MyDiffUtilCallback(animalList, oldAnimalList));
diffResult.dispatchUpdatesTo(listView.getAdapter());
}
oldAnimalList.clear();
oldAnimalList.addAll(animalList);
});
这就是我要将单个项目插入 LiveData
的方式
animalListLiveData.getValue().add(newAnimal);
// Inform observer.
animalListLiveData.setValue(animalListLiveData.getValue())
我觉得我的方法对于这样一个简单的更新操作来说有点大材小用了。如果List
很大,DiffUtil
需要扫描整个List
。
其他开发者和我有同样的感受。 https://github.com/googlesamples/android-architecture-components/issues/135
目前没有好的解决方案。
我想知道,您是否发现了从 LiveData
中插入(或删除)单个 List
项的任何好的做法(模式)?
如果您确切知道更改的位置,例如在新项目按时间顺序出现的情况下,您可以手动向适配器报告更改。
如果没有,您需要以某种方式让适配器知道哪些项目已更改。
最后一天,这些是你的选择:
如果插入和删除是确定的,可以直接通知适配器。无需中间人。
如果没有,你有两个选择。要么通知适配器整个数据集已更改,要么检查每个条目以验证位置 (DiffUtil)。
作为旁注,你应该在观察者之外设置你的适配器。直接在 onCreate(或类似的)上,使用 class 中预定义的空列表。然后您可以编辑此列表以响应来自可观察对象的更改。
我想知道,从 LiveData
中插入(或删除)单个 List
项目有哪些常见做法?
目前,这是我打算做的事情。
我有以下LiveData
LiveData<List<Animal>> animalListLiveData;
这就是我打算观察它的方式。
animalListLiveData.observe(this, animalList -> {
if (listView.getAdapter() == null) {
// First time.
ArrayAdapter<String> adapter = new ArrayAdapter<>(..., animalList);
// Assign adapter to ListView
listView.setAdapter(adapter);
} else {
// Update operation.
DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new MyDiffUtilCallback(animalList, oldAnimalList));
diffResult.dispatchUpdatesTo(listView.getAdapter());
}
oldAnimalList.clear();
oldAnimalList.addAll(animalList);
});
这就是我要将单个项目插入 LiveData
animalListLiveData.getValue().add(newAnimal);
// Inform observer.
animalListLiveData.setValue(animalListLiveData.getValue())
我觉得我的方法对于这样一个简单的更新操作来说有点大材小用了。如果List
很大,DiffUtil
需要扫描整个List
。
其他开发者和我有同样的感受。 https://github.com/googlesamples/android-architecture-components/issues/135
目前没有好的解决方案。
我想知道,您是否发现了从 LiveData
中插入(或删除)单个 List
项的任何好的做法(模式)?
如果您确切知道更改的位置,例如在新项目按时间顺序出现的情况下,您可以手动向适配器报告更改。
如果没有,您需要以某种方式让适配器知道哪些项目已更改。
最后一天,这些是你的选择:
如果插入和删除是确定的,可以直接通知适配器。无需中间人。
如果没有,你有两个选择。要么通知适配器整个数据集已更改,要么检查每个条目以验证位置 (DiffUtil)。
作为旁注,你应该在观察者之外设置你的适配器。直接在 onCreate(或类似的)上,使用 class 中预定义的空列表。然后您可以编辑此列表以响应来自可观察对象的更改。