在不同套餐中的活动之间导航

时间:2019-01-30 10:21:55

标签: android android-navigation android-bottom-nav-view

在不同程序包中的活动之间实施底部导航的最佳方法是什么?这些软件包以自上而下的方式相互导入。

设置

我将我的项目构造为一组程序包;本质上分为主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的底部导航,以便用户返回到先前的ACTIVITYMain

注意事项

  1. 为父包中的活动提供导航目标的最佳方法是什么?对我来说,以下似乎可行

    1. 交叉导入gradle中的所有软件包。即app分别导入PACKAGEend,每个PACKAGE分别导入append,而end分别导入{ {1}}和PACKAGE。这不是很干燥,但是它将使所有活动都可以普遍访问。
    2. app作为列表传递到Main,并以编程方式将其添加到导航菜单。同样,将ACTIVITYMain作为列表传递给ACTIVITY。考虑到活动具有生命周期,在这里我不确定,是否应该将活动类或其实例传递给子活动?这样做的好处是,如果缺少堆栈,我可以很容易地创建它。
    3. 询问“活动”后栈,因为它已经详细说明了到Final(即包含ACTIVITY)和Main(即包含Final的路由和Main)。在此之后,在事实之后创建后堆栈变得很棘手。
    4. 使用深层链接? (我仍在阅读此书)
    5. 是否应该简单地交叉引用每个ACTIVITY的{​​{1}}中parentAttribute下的每个活动设置<activity/>以提供必要的导航目标?在这里,我不确定如何最好地将其添加到底部导航图/菜单中?同样,有必要根据到达PACKAGES的路线,以编程方式设置manifest.xml
  2. 根据1中提供的对活动的访问方式,我不确定使此类目标可访问的最佳方法是什么?

    1. 这可以在导航图中完成吗?我可以通过编程方式将父包中的活动添加到导航图吗?可以使用parentAttrbiute来引用此类项目吗?是否可以编写自定义导航目标来表示此类项目。
    2. 应该简单地填充Final使用的导航菜单中提供的菜单吗?可以做到这一点并支持导航图提供的目标吗,也就是可以同时覆盖Placeholder和一起使用BottomNavigationView吗?

注意::虽然我看到了一些类似的问题和答案,但没有看到任何单独的程序包中涉及活动的问题。

1 个答案:

答案 0 :(得分:0)

我通过询问程序包管理器以确定我的程序包名称下应用程序中可用的活动来解决了这个问题。

MANIFEST.xml下向每个活动添加元数据,使我能够筛选出我想参考的活动。添加android:labelandroid:icon属性使我可以为导航视图中的按钮提供标签和图标,并在应用程序栏上显示它们。此外,我可以为每个活动创建意图并将其设置在菜单项上(其中一个android文档提到,任何未直接处理的menuItem都会调用其intent属性)。

我将所有这些都包装到一个界面中,现在可以将其添加到我希望在导航组件所支持的导航图之外导航的活动上。

注意:可能有深层链接可达到此目的,但我还没有看到一个很好的例子。