【发布时间】:2018-10-09 13:51:44
【问题描述】:
如何更新 ListItem 的字段?
我有以下 POJO 和 ViewModel 类。目前我正在从 LiveData 对象获取完整列表,然后更新其数据,然后重新设置 LiveData 对象的值,但我认为这不是正确的方法,因为只更新我拥有的一本书的名称重置完整的 LiveData 对象。
任何其他建议或良好做法以正确的方式做到这一点?
public class Book {
private long id;
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class BookProvider extends AndroidViewModel {
private final MutableLiveData<List<Book>> booksData;
public BookProvider(@NonNull Application application) {
super(application);
booksData = new MutableLiveData<>();
}
public LiveData<List<Book>> getBooksData() {
return booksData;
}
public void updateBookName(int position, String name) {
final List<Book> books = booksData.getValue();
if (books != null && books.size() > position) {
books.get(position).setName(name);
}
booksData.setValue(books);
}
}
【问题讨论】:
-
你的方法没问题,你有什么性能问题吗?
-
感谢您的回复。我还没有注意到任何性能问题,但是重置整个对象......可能是我想太多了。我想我应该保持原样。
-
如果你看到
LiveData来源setValue()方法并不昂贵:它只是设置参考,所以你不必担心
标签: java android mvvm viewmodel android-livedata