Каков наилучший способ реализовать нижнюю навигацию между действиями, которые находятся в разных пакетах?Где пакеты импортируют друг друга сверху вниз.
Настройка
Я структурировал свой проект как набор пакетов;По сути делится на основной app
, ряд промежуточных PACKAGE
с и конечный пакет end
:
app
- Предоставляет основное приложение и служит целью построения проектов.Он содержит одно действие Main
, обеспечивающее основную точку входа для приложения.Навигационная диаграмма просто отображает единственный фрагмент в ACTIVITY
, предоставленный каждым из импортированных PACKAGE
. PACKAGE
- Предоставляет одно действие, ACTIVITY
, для управления выделеннымзадача.График навигации управляет отношениями между различными фрагментами, поддерживающими действие; Дополнительно включает ссылку на действие Final
, импортированное из end
. end
- Предоставляет отдельное действие Final
, которое каждый PACKAGE
импортирует и использует какконечная навигационная ссылка для их навигационных графов.
Таким образом, каждый пакет содержит одно действие, один или несколько фрагментов и навигационный граф, который управляет маршрутизацией между ними и узлом, указывающим на действие в следующем.пакет в заказе app.Main > PACKAGE.ACTIVITY > end.Final
.
Навигация
Учитывая эту структуру, я хочу добавить нижнюю навигацию, |Main|...|Final|
, к каждому виду деятельности ACTIVITY
, чтобы была ссылка на Main
и еще одна на Final
.Соединиться с Final
достаточно просто, так как это уже является целью на каждом навигационном графике PACKAGE
, но я не уверен в наилучшем способе возврата к Main
.Точно так же я хочу предоставить нижнюю навигацию, |Main|ACTIVITY|...|
, к Final
, чтобы пользователь мог вернуться к предыдущему ACTIVITY
или Main
.
Соображения
Как лучше всего обеспечить навигационные цели для действий в родительских пакетах?Мне кажется, что следующее жизнеспособно
- Кросс-импорт всех пакетов в Gradle.То есть
app
импортирует каждые PACKAGE
и end
, каждый PACKAGE
импортирует app
и end
, а end
импортирует PACKAGE
и app
.Это не очень СУХО, но сделает все действия универсально доступными. - Передайте
Main
в виде списка на ACTIVITY
, добавляя его в меню навигации программно.Аналогичным образом передайте Main
и ACTIVITY
в виде списка Final
.Здесь я не уверен, учитывая, что у активов есть жизненные циклы, если я должен передать класс активности или его экземпляр дочернему действию?Преимущество здесь в том, что я могу легко создать backstack, если он отсутствует. - Опросить задний стек "Activity", так как он уже детализирует маршрут к
ACTIVITY
(то есть содержит Main
) и Final
(то есть содержит Main
и ACTIVITY
).Здесь становится сложно создать backstack после факта. - Использовать глубокую связь?(Я все еще читаю об этом)
- Нужно ли просто перекрестно ссылаться на каждый параметр активности
parentAttribute
под <activity/>
в каждом PACKAGES
* manifest.xml
, чтобы обеспечить необходимые навигационные цели?Здесь я не уверен, как лучше добавить это в нижнюю навигационную диаграмму / меню?Также становится необходимым программно установить parentAttrbiute
в зависимости от выбранного маршрута для достижения Final
.
В зависимости от того, как предоставляется доступ к действиям в 1 I 'я не уверен, что лучшее средство сделать такую цель доступной?
- Может ли это быть сделано в навигационном графике?Могу ли я программно добавить действия из родительского пакета в график навигации?Можно ли использовать
Placeholder
для ссылки на такие предметы?Может ли пользовательский пункт назначения навигации быть написан для представления таких элементов. - Следует ли просто заполнить меню, предоставленное навигационному меню, используемому
BottomNavigationView
?Можно ли это сделать и поддерживать цели, представленные навигационным графом, то есть можно перезаписать и OnNavigationItemSelectedLsitener
, и использовать setupWithNavController
вместе?
Примечание: Хотя я видел несколько похожих вопросов и ответов, я не видел ни одного, который бы касался действий в отдельных пакетах.