Как связать данные, как я могу лучше структурировать данные для локализации перерисовки пользовательского интерфейса, соответствующего только одному небольшому аспекту больших LiveData?
Мой пользовательский интерфейс - это фрагмент, представляющий Workout с набором TableLayout
s, каждый из которых соответствует Group . Каждый из TableLayout
s имеет набор TableRow
s, соответствующий Lift s ' Set s. Пользователь может добавить Lift s к Group (пользовательский интерфейс должен отражать это), а также может добавить Set s к Lift (UI должен отражать это).
Прямо сейчас все это выбирается с помощью одного запроса Room, возвращающего LiveData (который представляет собой иерархию Workout-> Groups-> Lifts-> Sets).
Проблема сейчас, если вы изменяете одно свойство набора, это вызывает наблюдателя для всей LiveData. Я мог бы написать что-то, что проверяет уникальность, прежде чем уведомить, что данные изменились, но это потребовало бы некоторых сложных вещей глубокого равенства.
В качестве альтернативы, я мог бы получить LiveData, а затем для каждой группы получить LiveData (будучи иерархией Lift s с Set s). Затем изменение набора вызовет изменение Lift и перерисовает ту часть пользовательского интерфейса, но не весь пользовательский интерфейс.
Тем не менее, если вы сделаете это, скажем, размещение текста в наборе (которое запускает обновление БД) перерисовает фрагмент с набором в нем, и фокус исчезнет с правильной вещи.
В конечном счете, как бы вы структурировали большую иерархию данных, которые все отображаются на экране одновременно, чтобы минимизировать перерисовки пользовательского интерфейса, вызванные изменениями LiveData + привязкой данных?