Реализация MVP для одного действия с двумя (или несколькими) фрагментами

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

Возникли некоторые вопросы, например, при нажатии на элемент из списка обратный вызов отправляется первому докладчику, но в этот момент кто отвечает за открытие второго фрагмента? докладчики "разговаривают" друг с другом? я должен сделать это через деятельность?

Я искал примеры одного действия с несколькими фрагментами, реализующими MVP, но пока не смог найти что-то подобное.

(Да, это может быть сделано иначе, но цель приложения - научиться реализовывать MVP для одного действия с несколькими фрагментами)

Цени любую помощь! Спасибо!

2 ответа

Изучив различные существующие примеры проектов MVP, я решил следовать большинству концепций в git-проекте TODO-MVP-TABLET от Google, который можно найти здесь:

https://github.com/googlesamples/android-architecture/tree/dev-todo-mvp-tablet

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

Принципы решения:

  • Каждый фрагмент имеет презентатора, определенного интерфейсом.
  • Есть более крупный ведущий, реализующий все меньшие ведущие.
  • Более крупный докладчик содержит ссылки на всех более мелких докладчиков, а когда вызывается метод, он просто делегирует действие соответствующему докладчику.
  • Фрагментам присваивается "большой" ведущий, поскольку они фактически не знают, что это так.
  • Маленькие докладчики должны содержать ссылку на представление.

Схема взята со страницы Google github:

Схема решения из проекта GitHub

Существует много способов реализации MVP. В основном мы используем 3 вещи. - Просмотр - Ведущий - Модал

Вы должны разобраться с работой экрана перед созданием этих вещей.

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

public interface LoginPresenter {
    void validateCredentials(String username, String password);
    void onDestroy();
}

Посмотреть структуру:

public interface LoginView {
void showProgress();

void hideProgress();

void setUsernameError();

void setPasswordError();

void navigateToHome();
}

Теперь это классы, которые вы должны реализовать в своем классе представления (Activity/ фрагмент) и предъявителе, где находится ваша логическая часть.

Теперь о ваших запросах.

это означает, что у действия будут оба экземпляра докладчиков. Нет, ваша деятельность не должна требовать нескольких докладчиков. он уже открыл ссылку на фрагмент (по идентификатору или тегу findfragment).

кто отвечает за открытие второго фрагмента?

Вы можете открыть его из любого из них либо Activity / фрагмент. если Activity использует getfragmentsupportManager, если фрагмент использует getfragmentManager

ПРИМЕЧАНИЕ: Для получения дополнительной информации следуйте этому примеру git. https://github.com/antoniolg/androidmvp

Другие вопросы по тегам