Как избежать слишком частого повторного рендера RecyclerView при использовании Flowable (RxJava)?

Приветствую.

Реализую MVVM с room + flowable из rxjava + retrofit2.

При открытии активити из репозитория мне прилетает FLowable со списком элементов из БД (room).
В этот же момент репозиторий запрашивает список у API, как только возвращается результат я удаляю имеющиеся записи в бд и вставляю то что прилетело от API.

Наблюдатель в активити разумеется успевает аж три раза отрендерить список в recyclerview. При этом заметно моргание: список не пустой -> список пустой -> список не пустой.

Получив один раз flowable из room'a со списком элементов, обсервер получает потом и пустой список (при удалении записей в БД) и затем новый список после вставки в БД.

Как избежать в этом случае слишком частого повторного рендера RecyclerView?
Есть какая-то устоявшаяся бэст-практис, тру вэй и т. п.?
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
WelloGraphics
@WelloGraphics
Android development
Можно попробовать завернуть удаление элементов и вставку элементов в транзакцию, чтобы вот этот промежуточный этап
список не пустой -> список пустой -> список не пустой
пропал.

Сделать это можно как-то так:
@Dao
abstract class ItemDao {
    @Transaction
    public void replaceItems(List<Item> items) {
         clearTable();
         insert(items);
    }

    @Insert
    protected abstract void insert(List<Item> items);

    @Query("DELETE FROM Item")
    protected abstract void clearTable();
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы