Как я могу обновить поле ListItem (LiveData) - PullRequest
0 голосов
/ 29 апреля 2018

Как я могу обновить поле 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 голосов
/ 29 апреля 2018

LiveData - это просто контейнер , содержащий ссылку на ваши данные и уведомление возможного наблюдателя об изменениях. Итак, что касается LiveData, это лучшее, что вы можете сделать.

Однако LiveData не поддерживает молекулярные изменения, поэтому каждое изменение может привести к аннулированию и перерисовке всего списка. Настоятельно рекомендуется использовать другой метод, если у вас много изменений в данных (например, приложения реального времени ).

...