2017-01-11 3 views
4

У меня есть активность, которая содержит несколько фрагментов, которые определяют каждый шаг в потоке регистрации для пользователя. Поток сложный, и следующий шаг определяется действиями пользователя на предыдущих шагах.Android MVP: одно действие с несколькими фрагментами

Течение, как показано ниже:

MainActivity | Fragment1 --> Fragment2 --> Fragment3 --> Fragment4 
             \ 
             --> Fragment5 --> Fragment6 

После MVP, я Посмотреть & Presenter для каждого фрагмента, участвующих. Меня беспокоит то, как общаться между Фрагментом и Деятельностью в MVP. Результат каждого Фрагмента должен быть доступен для Действия, чтобы решить, какой фрагмент должен быть показан ниже.

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

Что было бы лучшим подходом?

+0

Вы можете посмотреть на этом примере проекта http://github.com/mmirhoseini/marvel и эта статья https://hackernoon.com/yet-another-mvp-article может -part-1-let-get-to-know-the-project-d3fd553b3e21, чтобы лучше ознакомиться с MVP. –

ответ

2

Как вы уже упоминали, вы хотите общаться с фрагментами с помощью MVP. Согласно мне, я нашел 2 решения.

Решение 1: Обратные вызовы с использованием интерфейсов, а также создание одного интерфейса &, бомбардирующего множество методов, которые необходимо выполнять над действием/фрагментом. Попробуйте создать несколько интерфейсов. & добавьте методы в соответствии с вашими функциональными возможностями. & реализуйте их в соответствии с вашими потребностями.

Решение 2: Event Buses - это другое решение, использующее MVP, где ваш вид наблюдает за шиной &. Следующие пункты, которые следует соблюдать при работе с автобусами событий: a. Если вы используете публикацию или подписчиков в рамках действия фрагмента, они должны быть зарегистрированы и незарегистрированы с их жизненным циклом. В противном случае, вероятно, вы столкнетесь с утечками памяти или оборванными ссылками, которые могут привести к сбою вашего приложения.

b. Будьте осторожны в публикации событий между фрагментами. События не могут быть опубликованы или получены, когда фрагмент не запущен. Если у вас есть фрагмент, публикующий сообщение другому фрагменту, который в настоящее время не выполняется, а затем поменяйте его на другой, скорее всего, событие не будет обработано правильно. В библиотеке EventBus есть способ воспроизвести это событие, но в структуре Отто нет.

Для автобусов событий вы можете обратиться две библиотеки: - GreenBot: https://github.com/greenrobot/EventBus - Отто: http://www.vogella.com/tutorials/JavaLibrary-EventBusOtto/article.html

Заключение Если вы имеете дело с небольшими операциями по деятельности/Фрагменты то имеем дело с интерфейсами лучшим вариантом. Event Buses увеличивает производительность вашего приложения, а также зависимости для более крупных областей, которые вы можете использовать для автобусов событий.

+0

Решение 1 работает для меня – Rage

2

В моем проекте я использую тот факт, что каждый Fragment имеет доступ к родительскому Activity. Мое решение:

enter image description here