Модульное приложение Android для одного действия с зависимостями по кругу

У нас есть приложение с нижней панелью навигации. Навигация в нашем MainActivity, Мы управляем навигацией между различными экранами приложения с помощью фрагментов. Например, есть:

  • ProductFragment
  • LoginFragment
  • CartFragment
  • ProfileFragment
  • SearchFragment

В нашем MainActivity у нас есть метод pushFragment(Fragment fragment) который отвечает за замену текущего фрагмента новым фрагментом. Между нашими разными фрагментами есть много зависимостей. Например:

  • пользователь может запустить ProductFragment от CartFragment
  • Чтобы увидеть определенные данные о продукте, пользователь должен войти в систему (LoginFragment)
  • LoginFragment также используется из ProfileFragment
  • Через "исторические заказы" в ProfileFragment Вы также можете отобразить информацию о продукте через ProductFragment,

Зависимости фрагментов

Теперь мы хотим модулировать наше приложение для Android, чтобы использовать мгновенные приложения, более быстрое время сборки и все другие преимущества. В идеале мы хотели бы иметь модуль для каждого фрагмента. Однако из-за зависимостей, подобных тем, которые я только что описал, мы не можем создать иерархию линейных зависимостей и не знаем, как создавать наши модули.

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

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

0 ответов

Мы вроде нашли начало решения:

У нас есть интерфейс NavigationHelper который объявляет методы для перехода к другим фрагментам (startProfileFragment, startLoginFragment, startProductFragment...). Этот интерфейс находится в нашей libBase. Это реализовано в Activity, которая находится в модуле приложения.

Во фрагменте мы снимаем context в onAttach в NavigationHelper (также проверьте, что контекст является NavigationHelper и в противном случае выведите исключение):

private NavigationHelper mNavigationHelper;

public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof NavigationHelper){
        mNavigationHelper = (NavigationHelper) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement NavigationHelper");
    }
} 

Тогда вы можете просто позвонить mNavigationHelper.startProfileFragment() Переключать фрагменты.

Спасибо @Andrey, чтобы напомнить мне опубликовать это:)

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