gpt4 book ai didi

android - 具有架构组件的多模块导航

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:38 26 4
gpt4 key购买 nike

所以我在我当前的应用程序中为我的模块采用了这种结构。

App Module Structure

我还没有找到任何关于多模块导航的官方文档,但我找到了这个 article对此,我的 gradle 文件是这样的:

特征 1 - 细节

...
implementation project(":base")
implementation project(":feature-2-detail")
...

特征 2 - 细节

...
implementation project(":base")
implementation project(":feature-1-detail")
...

特征 3 - 细节

...
implementation project(":base")
implementation project(":feature-1-detail")
...

这是我的导航图:

特征 1 - 细节

<navigation ...
android:id="@+id/graph_feature_1_id">
<include app:graph="@navigation/graph_feature_2" />
<fragment ...
android:id="@+id/nav_feature_1">
<action ...
app:destination="@+id/graph_feature_2_id" />

</fragment>
</navigation>

特征 2 - 细节

<navigation ...
android:id="@+id/graph_feature_2_id">
<include app:graph="@navigation/graph_feature_1" />
<fragment ...
android:id="@+id/nav_feature_2">
<action ...
app:destination="@+id/graph_feature_1_id" />

</fragment>
</navigation>

特征 3 - 细节

<navigation ...
android:id="@+id/graph_feature_3_id">
<include app:graph="@navigation/graph_feature_1" />
<fragment ...
android:id="@+id/nav_feature_3">
<action ...
app:destination="@+id/graph_feature_1_id" />

</fragment>
</navigation>

所以一切都适用于这种设置,但这里的问题是要将模块连接到另一个模块,我们必须将其他功能添加为当前功能的依赖项。就像我的情况一样,Feature 1 - Detail 可以转到 Feature 2 - Detail 反之亦然,这样做让我在 gradle 中产生循环依赖。

还有其他方法可以做多模块导航吗?我试过使用深层链接但无济于事。

任何帮助将不胜感激!谢谢!

最佳答案

这已经过去一年了,但库现在可以支持这个确切的用例!截至2.1.0-alpha03 ,我们可以通过深层链接 URI 进行导航。

与其将功能作为实现细节添加到彼此,不如让它们彼此不知情,并使用深度链接导航。

功能 1 - 详细信息 - build.gradle

dependencies {
implementation project(':base')
}

特征 2 - 细节相同。它不需要知道其他模块。

要进行模块间导航,我们必须首先定义深层链接,以便通过 deepLink 标记导航到该目的地。

特征 1 - 详细信息 - 导航图

<navigation ...
android:id="@+id/graph_feature_1_detail_id">
<fragment ...
android:id="@+id/nav_feature_1_detail">
<deepLink app:uri="myApp://feature1detail"/>

</fragment>
</navigation>

特征 2 - 详细信息 - 导航图

<navigation ...
android:id="@+id/graph_feature_2_detail_id">
<fragment ...
android:id="@+id/nav_feature_2_detail">
<deepLink app:uri="myApp://feature2detail"/>

</fragment>
</navigation>

现在我们有了 URI 集的深层链接,我们可以直接在 NavController

中使用它

所以在Feature 1 - Detail 的 fragment 中,也许是在点击按钮时?任何你必须执行导航的地方

class Feature1DetailFragment {
fun onViewCreated(...) {
...
view.setOnClickListener {
val uri = Uri.parse("myApp://feature2detail")
findNavController().navigate(uri)
}
}
}

特征 2 - 细节中,

class Feature2DetailFragment {
fun onViewCreated(...) {
...
view.setOnClickListener {
val uri = Uri.parse("myApp://feature1detail")
findNavController().navigate(uri)
}
}
}

瞧!模块间导航。

在撰写本文时,最新的稳定版本是 2.1.0-rc01

虽然我还没有在更复杂的项目上尝试过,但我喜欢这个库,我希望看到这个库更加成熟!

我创建了一个 Medium article对这个。你可以看看它。干杯!

关于android - 具有架构组件的多模块导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51263301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com