Дата изменяется автоматически при обновлении какой-либо строки в базе данных комнат - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть TabLayout с двумя вкладками, чьим родителем является другой Fragment, вложенный в MainActivity. Эти две вкладки содержат RecyclerView каждая, в которой находятся элементы с одинаковым расположением. На первой вкладке перечислены все журналы, а на второй - только закладки.

Я использую общий класс ViewModel и Adapter, чтобы обновить sh содержимое обеих вкладок. Однако проблема в том, что, когда я нажимаю флажок «Закладка» для определенного элемента, объект даты изменяется автоматически и принимает совершенно случайные значения. Однако этот конкретный элемент добавляется на вкладку Bookmarks, а также обновляется поле bookmark соответствующей строки, поскольку именно оно отвечает за добавление или удаление элементов на вкладке Bookmarks.

Такое случайное поведение не возникает при использовании класса ViewModel, который я создал только для первой (Journal) вкладки, и в этом случае поле закладки также обновляется должным образом.

Это то, что я выполняется обновление журнала (добавление или удаление закладки)

Journal updatedJournal = new Journal(journal.getTitle(), journal.getDescription(), journal.getDate(), bookmark, 0);
//  Toast.makeText(getContext(), journal.getDate().toString(), Toast.LENGTH_SHORT).show();
updatedJournal.setId(journal.getId());
journalViewModel.update(updatedJournal);

, где journal - объект Journal, получающий событие щелчка. Toast сообщает дату перед обновлением, что означает, что journal объект не тот, который виноват.

Я не уверен, что это происходит из-за:

  • Использование одинаковые ViewModel или Adapter одновременно для двух разных фрагментов.
  • Создание нескольких объектов LiveData внутри ViewModel, а также Repository конструкторов.

ViewModel constructor

public JournalViewModel(@NonNull Application application) {
    super(application);
    repository = new JournalRepository(application);
    journals = repository.getAllJournals();
    bookmarkedJournals = repository.getBookmarkedJournals();
}

Repository constructor

public JournalRepository(Application application) {
    JournalDatabase journalDatabase = JournalDatabase.getInstance(application);
    journalDao = journalDatabase.journalDao();
    allJournals = journalDao.getJournalsByDate();
    bookmarkedJournals = journalDao.getBookmarkedJournals();
}

Или есть что-то, что я пропускаю или делаю неправильно.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...