Два фрагмента никогда не должны общаться напрямую - PullRequest
0 голосов
/ 24 октября 2019

У меня Активность A и B . A имеет фрагмент AF, B имеет BF.

Из AF я перемещаюсь к фрагменту BF следующим образом:

Intent i = new Intent(getActivity(), B.class);
startActivityForResult(i, B.REQUEST_CODE);

Из действия B я загружаю фрагмент BF какthis:

BF bf = new BF();
bf.init(this);
getSupportFragmentManager().beginTransaction()
      .add(R.id.bfFragmentHolder,bf)
      .commitAllowingStateLoss();

После завершения работы во фрагменте BF я передаю некоторые данные в активность B через интерфейс с некоторым объектом данных и возвращаюсь к фрагменту AF действия A, например:

Intent intent = new Intent();
setResult(RESULT_OK, intent);
finish();

После того, как вызывается onStart() этого фрагмента AF.

Мой вопрос: как я могу передать данные в BF во фрагмент AF? Я знаю, что он предложил не общаться напрямую. Но как я могу отправить данные туда? Должен ли я использовать намерение для передачи данных в действие A, а затем передать их фрагменту AF?

1 Ответ

0 голосов
/ 24 октября 2019

В вашем случае, один из способов подумать об этом - это использовать что-то, что управляет состоянием во всем приложении, так как вы вынуждены выполнять несколько действий, но при этом вам нужно иметь какой-то способ связи между ними. AppManager был бы идеальным способом решения такой проблемы.

Вы бы внедрили / запустили AppManager при запуске вашего приложения и привязали бы его к вашему классу приложений, я думаю, что иметь его как Singleton было бы идеальноЧто ж.

Тем не менее, я чувствую необходимость упомянуть об этом, но если вы можете объединить Действие A и Действие B в один Контейнерный Действие и сделать переходы фрагментов AF и BF с помощью Навигационного Компонента, тогда имейтемодель общего представления для всей деятельности контейнера, фрагменты AF и BF, это было бы намного приятнее, но я знаю, что вы можете быть ограничены или ограничены устаревшим кодом.

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

Надеюсь, это решит вашу проблему!

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