Модульное приложение 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, чтобы напомнить мне опубликовать это:)