如何更新ListItem(LiveData)的字段

时间:2018-04-29 06:44:14

标签: java android mvvm viewmodel android-livedata

如何更新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);
        }
}

1 个答案:

答案 0 :(得分:0)

LiveData只是一个容器,对您的数据持有引用通知可能的观察者更改。因此,就LiveData而言,这是你能做的最好的事情。

但是LiveData不支持分子更改,因此每次更改都可能导致整个列表无效并重新绘制。如果您对数据进行了大量更改(例如实时应用程序),强烈建议您使用其他方法。