我正在尝试实现具有动态功能的 new 导航组件
所以结构看起来像这样:
dynamicFeatures = []
)功能
库-> globalNav
我一直在阅读很多没有成功的方法,因为如何将它们粘合在一起而不相互依赖,因为每个功能都是完全独立的
例如应用(app module)
以SplashActivity
开始并检查会话状态,所以我的问题是我应该如何启动login_graph
或{{1 }},在第一种情况下,完成身份验证流程后就开始家庭吗?
我目前尝试将它们粘合在一起的方式是使用home_graph
模块(android-library),我发现了一些解决方法:
globalNav
深层链接(我想用作导航图的深层链接已包含那些链接),但由于某些原因,即使只有我的应用程序使用它,它仍始终显示“选择完整操作”选择器。
Intent().setClassName(context.packageName, className).also { context.startActivity(it) }
,但行为与Deeplinks相同任何建议都会很棒:)
PS:我一直在浏览/阅读的一些参考文献:
https://www.youtube.com/watch?v=ST2W1Y_Ztvk
https://jeroenmols.com/blog/2019/04/02/modularizationexample/
GitHub actions
存储库
PSS:如果我找到一个好的解决方案,我会尽力解决这个问题,我也将确保也回答。
对于对此感兴趣的任何人(目前不支持此问题),您可以在此处加注星标:https://issuetracker.google.com/issues/132170186
答案 0 :(得分:3)
我们正在积极支持动态功能模块的导航。正如Joaquim所说,this isse是寻找初期开发进度的地方。
您可以通过今天将SNAPSHOT添加到build.gradle文件中来使用它:
repositories {
maven {
url "https://ci.android.com/builds/submitted/5956592/androidx_snapshot/latest/repository/"
}
}
dependencies {
implementation "androidx.navigation:navigation-dynamic-features-fragment:2.3.0-SNAPSHOT"
}
这不是一个稳定的版本,在稳定发行之前可能会有更改。此时,该库上也没有公共文档。随着我们的前进,我将更新这个问题。
与此同时,您也可以观看recording on this from the Android Dev Summit 2019。
答案 1 :(得分:1)
androidx.navigation:navigation-dynamic-features-fragment:2.3.0
现在支持此功能。
只需在导航中包含app:moduleName
。
示例:
<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
。
答案 2 :(得分:0)
几分钟前,我也遇到了同样的问题,在尝试寻找答案时,我看到了您的问题。
就我而言,我有2个模块 app 和登录。 登录模块是动态功能模块,取决于模块 app 。 登录模块包含用于登录目的的所有逻辑和导航(包含登录,注册等)。我想将此LoginActivity(这是登录模块中的一个活动,其中包含所有导航功能)包含在应用程序模块的主导航图中。我们无法从它不知道的应用程序层调用LoginActivity。但是
<activity android:id="@+id/loginActivity"
android:name="login.LoginActivity"
android:label="LoginActivity"/>
将其手动添加到主导航图中对我来说很有效。