Что такое хороший способ структурировать иерархические данные в LiveDatas для целей привязки данных? - PullRequest
0 голосов
/ 28 июня 2019

Как связать данные, как я могу лучше структурировать данные для локализации перерисовки пользовательского интерфейса, соответствующего только одному небольшому аспекту больших 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 + привязкой данных?

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