首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >具有即时/(动态)功能模块的导航组件

具有即时/(动态)功能模块的导航组件
EN

Stack Overflow用户
提问于 2019-04-05 17:52:14
回答 3查看 1.8K关注 0票数 12

我正在尝试实现具有动态特性的新导航组件

所以它的结构是这样的:

  • 应用程序( gradle)
  • features

中包含动态dynamicFeatures = []

代码语言:javascript
复制
- login
- home
- etc.

  • 库-> globalNav

我已经读了很多书,但没有成功,如何将它们粘合在一起而不相互依赖,因为每个功能都是完全隔离的

例如应用程序(app module)SplashActivity开始并检查会话状态,所以我的问题是我应该如何启动login_graphhome_graph,在第一种情况下,在完成身份验证流程后启动主页?

我目前尝试将它们粘合在一起的方式是使用一个globalNav模块(android-library),我找到了几个变通方法:

  • 完整的类路径,这意味着我从className (糟糕,因为这不是真正的可伸缩性,并且使得维护PITA)

开始意图

代码语言:javascript
复制
Intent().setClassName(context.packageName, className).also { context.startActivity(it) }

  • 深度链接(我想用作导航图的那个已经有了),但由于某些原因,它总是显示“选择完整动作”选择器,即使只有我的应用程序使用它。

代码语言:javascript
复制
- I've already tried using `actions` but the same behavior as deeplinks

任何建议都是很棒的:)

PS:我一直在查看/阅读的一些参考资料:

代码语言:javascript
复制
- This vid seems to address my question with instant apps (at the end of the talk), but there's a couple of issues, time was running out so they had to rush it, and there's no model project containing this use case :()

PSS:我正在积极尝试解决这个问题,如果我找到了一个好的解决方案,我也会保证回答的。

编辑

对于对此感兴趣的任何人,由于它目前不受支持,您可以在此处启动该问题:https://issuetracker.google.com/issues/132170186

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-21 22:53:43

使用navigation-dynamic-feature-*组件支持按需功能模块中的导航。最新版本可以在maven.google.com上找到。

我们确实有一个sample available,它演示了XML和Kotlin DSL声明的可能性。

文档为available here

想要了解更多信息,你也可以观看recording on this from the Android Dev Summit 2019

票数 3
EN

Stack Overflow用户

发布于 2020-07-01 17:08:11

现在在androidx.navigation:navigation-dynamic-features-fragment:2.3.0中支持这一点。

只需在导航中包含app:moduleName即可。

示例:

代码语言:javascript
复制
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/menu_nav_graph"
    app:startDestination="@id/main_fragment">

<!-- this fragment is in base module -->
<fragment
        android:id="@+id/main_fragment"
        android:name="com.example.app.MainFragment"
        tools:layout="@layout/fragment_main" />

<!-- activity and fragment in a different module -->
<activity
        android:id="@+id/splash_activity"
        android:name="com.example.examplemodule.splash.SplashActivity"
        app:moduleName="examplemodule" />

<fragment
        android:id="@+id/user_profile"
        android:name="com.example.examplemodule.user.UserProfileFragment"
        android:label="UserProfileFragment"
        app:moduleName="examplemodule" />

</navigation>

您可以从任何地方调用findNavController().navigate(R.id.splash_activity),如果需要,它将为您安装examplemodule

票数 1
EN

Stack Overflow用户

发布于 2019-05-13 00:51:24

几分钟前我也遇到了同样的问题,我在试图找到答案时看到了你的问题。

在我的例子中,我有两个模块,应用程序登录登录模块是依赖于应用程序模块的动态特性模块。模块 login 包含用于日志记录的所有逻辑和导航(它包含登录、注册等)。我想在应用程序模块的主导航图中包含此LoginActivity (这是登录模块中的一个活动,所有导航都在其中)。我们不能从它不知道的应用层调用LoginActivity。但

代码语言:javascript
复制
<activity android:id="@+id/loginActivity"
    android:name="login.LoginActivity"
    android:label="LoginActivity"/>

在主导航图中手动添加它对我来说很有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55532700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档