我正在尝试实现具有动态特性的新导航组件
所以它的结构是这样的:
中包含动态dynamicFeatures = []
- login
- home
- etc.
我已经读了很多书,但没有成功,如何将它们粘合在一起而不相互依赖,因为每个功能都是完全隔离的
例如应用程序(app module)
以SplashActivity
开始并检查会话状态,所以我的问题是我应该如何启动login_graph
或home_graph
,在第一种情况下,在完成身份验证流程后启动主页?
我目前尝试将它们粘合在一起的方式是使用一个globalNav
模块(android-library),我找到了几个变通方法:
开始意图
Intent().setClassName(context.packageName, className).also { context.startActivity(it) }
- I've already tried using `actions` but the same behavior as deeplinks
任何建议都是很棒的:)
PS:我一直在查看/阅读的一些参考资料:
- 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 :()
googlesamples
repositoryPSS:我正在积极尝试解决这个问题,如果我找到了一个好的解决方案,我也会保证回答的。
编辑
对于对此感兴趣的任何人,由于它目前不受支持,您可以在此处启动该问题:https://issuetracker.google.com/issues/132170186
发布于 2019-10-21 22:53:43
使用navigation-dynamic-feature-*
组件支持按需功能模块中的导航。最新版本可以在maven.google.com上找到。
我们确实有一个sample available,它演示了XML和Kotlin DSL声明的可能性。
想要了解更多信息,你也可以观看recording on this from the Android Dev Summit 2019。
发布于 2020-07-01 17:08:11
现在在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
。
发布于 2019-05-13 00:51:24
几分钟前我也遇到了同样的问题,我在试图找到答案时看到了你的问题。
在我的例子中,我有两个模块,应用程序和登录。登录模块是依赖于应用程序模块的动态特性模块。模块 login 包含用于日志记录的所有逻辑和导航(它包含登录、注册等)。我想在应用程序模块的主导航图中包含此LoginActivity (这是登录模块中的一个活动,所有导航都在其中)。我们不能从它不知道的应用层调用LoginActivity。但
<activity android:id="@+id/loginActivity"
android:name="login.LoginActivity"
android:label="LoginActivity"/>
在主导航图中手动添加它对我来说很有效。
https://stackoverflow.com/questions/55532700
复制相似问题