Переход между действиями в разных пакетах - PullRequest
0 голосов
/ 30 января 2019

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

Настройка

Я структурировал свой проект как набор пакетов;По сути делится на основной 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.

Соображения

  1. Как лучше всего обеспечить навигационные цели для действий в родительских пакетах?Мне кажется, что следующее жизнеспособно

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

    1. Может ли это быть сделано в навигационном графике?Могу ли я программно добавить действия из родительского пакета в график навигации?Можно ли использовать Placeholder для ссылки на такие предметы?Может ли пользовательский пункт назначения навигации быть написан для представления таких элементов.
    2. Следует ли просто заполнить меню, предоставленное навигационному меню, используемому BottomNavigationView?Можно ли это сделать и поддерживать цели, представленные навигационным графом, то есть можно перезаписать и OnNavigationItemSelectedLsitener, и использовать setupWithNavController вместе?

Примечание: Хотя я видел несколько похожих вопросов и ответов, я не видел ни одного, который бы касался действий в отдельных пакетах.

1 Ответ

0 голосов
/ 04 февраля 2019

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

Добавление метаданных к каждому действию в разделе MANIFEST.xml позволило мне отфильтровать действия, на которые я хотел сослаться.Добавление атрибутов android:label и android:icon позволило мне предоставлять ярлыки и значки для кнопок в навигационном представлении и отображать их на панели приложения.Кроме того, я мог бы создать намерения для каждого действия и установить их для пунктов меню (один из документов для Android упоминал, что для любого menuItem, который не обрабатывается напрямую, будет вызываться его атрибут intent).

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

Примечание: Возможно, глубокие ссылки служат этой цели, но я пока не видел хорошего примера.

...