在不同包中的活动之间导航
Navigating between activities in different packages
在不同包中的活动之间实现底部导航的最佳方式是什么?包以自上而下的方式相互导入。
设置
我将我的项目构建为一组包;基本上分为主要 app
、一些中间 PACKAGE
和最后的 end
包:
app
- 提供主要应用程序并作为项目构建目标。它包含一个 activity、Main
,为应用程序提供主要入口点。导航图只是将唯一的片段映射到每个导入的 PACKAGE
提供的 ACTIVITY
。
PACKAGE
- 提供单个 activity、ACTIVITY
来管理专用任务。导航图管理支持 activity 的各个片段之间的关系; 另外 它包括从 end
. 导入的 Final
activity link
end
- 提供单个 activity、Final
,每个 PACKAGE
导入它用作导航图的终止导航 link。
因此每个包都包含一个activity、一个或多个片段和一个导航图,该导航图管理它们之间的路由以及一个指向下一个包中的activity的节点 activity app.Main > PACKAGE.ACTIVITY > end.Final
。
导航
鉴于此结构,我想向每个 activity ACTIVITY
添加底部导航 |Main|...|Final|
,这样就有一个 link 回到 Main
另一个前进到 Final
。向前链接到 Final
非常容易,因为它已经是每个 PACKAGE
导航图中的目标,但我不确定 link 回到 Main
的最佳方法.同样,我想提供 |Main|ACTIVITY|...|
到 Final
的底部导航,以便用户返回到前面的 ACTIVITY
或 Main
。
注意事项
为 parent 包中的活动提供导航目标的最佳方法是什么?对我来说,以下似乎可行
- 交叉导入 gradle 中的所有包。即
app
导入每个 PACKAGE
和 end
,每个 PACKAGE
导入 app
和 end
,end
导入每个 PACKAGE
和 app
。这不是很 DRY,但它将使所有活动都可以访问。
- 将
Main
作为列表传递给 ACTIVITY
,以编程方式将其添加到导航菜单。类似地,将 Main
和 ACTIVITY
作为列表传递给 Final
。在这里我不确定,鉴于活动有生命周期,我是否应该将 activity class 或其实例传递给 child activity ?这里的优点是,如果它丢失了,我可以很容易地创建 backstack。
- 查询 "Activity" 返回堆栈,因为它已经详细说明了到
ACTIVITY
(即它包含 Main
)和 Final
(即它包含 Main
和 ACTIVITY
)。在这里,事后创建后台堆栈变得很棘手。
- 使用深度 linking ? (我还在阅读这篇文章)
- 是否应该简单地交叉引用每个
PACKAGES
的 manifest.xml
中 <activity/>
下的每个 activity 设置 parentAttribute
以提供必要的导航目标?在这里我不确定如何最好地将它添加到底部导航 graph/menu ?此外,有必要根据到达 Final
. 所采用的路线以编程方式设置 parentAttrbiute
取决于 1 中如何提供对活动的访问权限,我不确定使此类目标可访问的最佳方法是什么?
- 这可以在导航图中完成吗?我可以通过编程方式将 parent 包中的活动添加到导航图中吗?可以使用
Placeholder
来引用此类项目吗?是否可以编写自定义导航目标来表示此类项目。
- 是否应该简单地填充提供给
BottomNavigationView
使用的导航菜单的菜单?可以做到这一点并支持导航图提供的目标,也就是说可以覆盖 OnNavigationItemSelectedLsitener
并一起使用 setupWithNavController
吗?
注意:虽然我看到了一些类似的问题和答案,但我还没有看到任何处理单独包中活动的问题和答案。
我通过询问包管理器来确定在我的应用程序中可用的活动,在我的包名称下,我解决了这个问题。
在 MANIFEST.xml
下为每个 activity 添加元数据,使我能够过滤我想要引用的活动。添加 android:label
和 android:icon
属性允许我为导航视图中的按钮提供标签和图标,并将它们显示在应用栏上。此外,我可以为每个 activity 创建意图并将其设置在菜单项上(其中一个 android 文档提到任何未直接处理的菜单项都将调用其 intent 属性)。
我将所有这些都包装到一个界面中,现在可以将其附加到我希望在导航组件支持的导航图之外导航的活动中。
注意:深层链接可能用于此目的,但我还没有看到一个很好的例子。
在不同包中的活动之间实现底部导航的最佳方式是什么?包以自上而下的方式相互导入。
设置
我将我的项目构建为一组包;基本上分为主要 app
、一些中间 PACKAGE
和最后的 end
包:
app
- 提供主要应用程序并作为项目构建目标。它包含一个 activity、Main
,为应用程序提供主要入口点。导航图只是将唯一的片段映射到每个导入的PACKAGE
提供的ACTIVITY
。PACKAGE
- 提供单个 activity、ACTIVITY
来管理专用任务。导航图管理支持 activity 的各个片段之间的关系; 另外 它包括从end
. 导入的 end
- 提供单个 activity、Final
,每个PACKAGE
导入它用作导航图的终止导航 link。
Final
activity link
因此每个包都包含一个activity、一个或多个片段和一个导航图,该导航图管理它们之间的路由以及一个指向下一个包中的activity的节点 activity app.Main > PACKAGE.ACTIVITY > end.Final
。
导航
鉴于此结构,我想向每个 activity ACTIVITY
添加底部导航 |Main|...|Final|
,这样就有一个 link 回到 Main
另一个前进到 Final
。向前链接到 Final
非常容易,因为它已经是每个 PACKAGE
导航图中的目标,但我不确定 link 回到 Main
的最佳方法.同样,我想提供 |Main|ACTIVITY|...|
到 Final
的底部导航,以便用户返回到前面的 ACTIVITY
或 Main
。
注意事项
为 parent 包中的活动提供导航目标的最佳方法是什么?对我来说,以下似乎可行
- 交叉导入 gradle 中的所有包。即
app
导入每个PACKAGE
和end
,每个PACKAGE
导入app
和end
,end
导入每个PACKAGE
和app
。这不是很 DRY,但它将使所有活动都可以访问。 - 将
Main
作为列表传递给ACTIVITY
,以编程方式将其添加到导航菜单。类似地,将Main
和ACTIVITY
作为列表传递给Final
。在这里我不确定,鉴于活动有生命周期,我是否应该将 activity class 或其实例传递给 child activity ?这里的优点是,如果它丢失了,我可以很容易地创建 backstack。 - 查询 "Activity" 返回堆栈,因为它已经详细说明了到
ACTIVITY
(即它包含Main
)和Final
(即它包含Main
和ACTIVITY
)。在这里,事后创建后台堆栈变得很棘手。 - 使用深度 linking ? (我还在阅读这篇文章)
- 是否应该简单地交叉引用每个
PACKAGES
的manifest.xml
中<activity/>
下的每个 activity 设置parentAttribute
以提供必要的导航目标?在这里我不确定如何最好地将它添加到底部导航 graph/menu ?此外,有必要根据到达Final
. 所采用的路线以编程方式设置
parentAttrbiute
- 交叉导入 gradle 中的所有包。即
取决于 1 中如何提供对活动的访问权限,我不确定使此类目标可访问的最佳方法是什么?
- 这可以在导航图中完成吗?我可以通过编程方式将 parent 包中的活动添加到导航图中吗?可以使用
Placeholder
来引用此类项目吗?是否可以编写自定义导航目标来表示此类项目。 - 是否应该简单地填充提供给
BottomNavigationView
使用的导航菜单的菜单?可以做到这一点并支持导航图提供的目标,也就是说可以覆盖OnNavigationItemSelectedLsitener
并一起使用setupWithNavController
吗?
- 这可以在导航图中完成吗?我可以通过编程方式将 parent 包中的活动添加到导航图中吗?可以使用
注意:虽然我看到了一些类似的问题和答案,但我还没有看到任何处理单独包中活动的问题和答案。
我通过询问包管理器来确定在我的应用程序中可用的活动,在我的包名称下,我解决了这个问题。
在 MANIFEST.xml
下为每个 activity 添加元数据,使我能够过滤我想要引用的活动。添加 android:label
和 android:icon
属性允许我为导航视图中的按钮提供标签和图标,并将它们显示在应用栏上。此外,我可以为每个 activity 创建意图并将其设置在菜单项上(其中一个 android 文档提到任何未直接处理的菜单项都将调用其 intent 属性)。
我将所有这些都包装到一个界面中,现在可以将其附加到我希望在导航组件支持的导航图之外导航的活动中。
注意:深层链接可能用于此目的,但我还没有看到一个很好的例子。