Как охватить модель представления родительским фрагментом? - PullRequest
0 голосов
/ 17 декабря 2018

Итак, я использую новый компонент навигации (с одним принципом действия) и общаюсь между каждым фрагментом, используя модели общего представления, однако я дошел до того, что мне иногда нужно очистить модель представления, но я могу »Не могу найти хорошее место, чтобы очистить его.Но я думаю, что вместо того, чтобы пытаться очистить его самому, я действительно должен позволить фреймворку сделать это для меня, но это не так, потому что модели представлений являются общими и доступны для действия, но я думаю, что могу охватить ихродительский фрагмент, я нарисовал рисунок, чтобы проиллюстрировать, что я пытаюсь сделать. my navigation flow, поэтому я хочу очистить только 2 модели представления, когда я возвращаюсь назад из «Дочерний 1-дочерний а» в настоящее времямодели представления никогда не очищаются, пытаясь получить модель представления в настоящее время, вызывая 'this' во фрагменте, а getParentFragment в дочернем элементе не работает, кто-нибудь может привести пример?

EDIT

Похоже, я уже делал нечто подобное, но в моем случае это не работает, поэтому я добавлю немного кода, вот как я получаю доступ к первой модели представления в родительском фрагменте

model = ViewModelProviders.of (this) .get (RequestViewModel.class);

, а затем в дочернем фрагменте я делаю это

requestViewModel = ViewModelProviders.of(getParentFragment ()). get (RequestViewModel.class);

, но данные между ними не сохраняются, к обоим прикреплены наблюдатели

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Вы проверяли этот проект?https://github.com/android10/Android-CleanArchitecture

По сути, картографы выполняют эту работу, чтобы сохранить независимость фреймворков, что является одним из принципов чистой архитектуры.Я уже некоторое время работаю с базами данных областей и с чистой архитектурой, и вот как это работает для меня:

  • Существуют модели, расширяющие возможности RealmObject.Я использую эти модели в слое данных.
  • Есть модели для ответов.Это те модели, которые используются для сериализации json.Я использую эту модель в слое данных.

В доменных и презентационных слоях вы ничего не знаете о сфере - в доменном слое есть модели.Это POJO.- Есть сопоставители для сопоставления между откликом на модели областей - Есть сопоставители для сопоставления между моделями областей и моделями доменов.

0 голосов
/ 17 декабря 2018

Таким образом, согласно @ martin предложенному решению получается, что даже если один / много фрагментов добавлены как дочерний элемент внутри родительский фрагмент , Компонент навигации обеспечивает одинаковый Диспетчер фрагментов для обоих фрагментов.

Это означает, что даже если фрагменты добавляются как родительско-дочерняя иерархия, они будут использовать один и тот же диспетчер фрагментов.из компонента Навигация (может быть, ошибка в этой библиотеке?) и, таким образом, ViewModels не являются общими из-за этой дилеммы при использовании экземпляра getParentFragment() для ViewModelProvider внутри дочернего фрагмента.


Итак, одним из быстрых решений для совместного использования ViewModels было бы получение экземпляра родительского фрагмента из менеджера фрагментов с использованием строки ниже для родительских и дочерних фрагментов:

ViewModelProviders.of(getParentFragment()).get(SharedViewModel.class); // using this in both parent amd child fragment would do the trick !
0 голосов
/ 17 декабря 2018

Хорошо, поэтому, используя это в родительском

model = ViewModelProviders.of(this).get(RequestViewModel.class);

и это в дочернем

requestViewModel = ViewModelProviders.of(getParentFragment()).get(RequestViewModel.class);

давали мне разные хеш-коды, но одинаковые идентификаторы, и, похоже, это из-закомпонент навигации, если я изменяю их оба на getParentFragment, тогда он работает, поэтому я думаю, что компонент заменяет фрагменты вместо добавления их здесь, большое спасибо @WadeWilson и @ JeelVankhede

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