Основной поток деталей с общей моделью представления

Эта страница документации Android в разделе "Обмен данными между фрагментами" описывает, как решить совместное использование выбранного элемента в потоке основных сведений с помощью ViewModel. Однако решение работает только на больших устройствах, где вы помещаете оба фрагмента в один и тот же файл Activity. На небольших устройствах общий подход состоит в том, чтобы иметь фрагмент детали в своем собственном DetailActivity, и тогда два фрагмента будут иметь разные экземпляры ViewModel, поэтому подход не сработает.

Итак, мой вопрос: как вы обобщаете это на все размеры устройств?

У меня есть одна идея, я мог бы поместить два фрагмента в одну и ту же активность даже на небольших устройствах. Положим, это идет вразрез с каждой реализацией основного потока деталей, которую я когда-либо видел. Можно было бы реализовать навигационную подгонку. И тогда DetailActivity будет использоваться только для отображения отдельных элементов в качестве реакции на намерения. Он может создать экземпляр SharedViewModel и установить элемент, переданный как selectedItem. Затем фрагмент детали может получить экземпляр SharedViewModel таким же образом, и ему не нужно различать два родительских действия.

Этот вопрос похож, но люди в комментариях жаловались, что он слишком широкий и неясный.


person findusl    schedule 25.10.2018    source источник


Ответы (1)


зачем вам DetailActivity на небольших устройствах? У вас по-прежнему может быть только один Activity, содержащий общий ViewModel между мастером и подробным Fragment.

Затем используйте Fragment транзакции или NavigationController для переключения между главным и подробным. Единственная разница в том, что оба фрагмента не будут видны на экране одновременно, но они по-прежнему будут иметь общий базовый ViewModel, связанный с родительским Activity.

Возможно, на момент запроса пример подсолнечника был недоступен. Проверьте это, так как он реализует поток master/detail для списка растений, который кажется вам тем, что вы ищете.

person dnhyde    schedule 22.10.2019