如何将数据 class 对象从一个模块发送到另一个模块?
How to send a data class object from one module to another module?
我正在使用 Android 导航组件和单个 Activity 架构。我想从模块 A 向模块 B 发送数据 class 对象。
我的 feed 模块在 build.gradle 中导入 store_article模块。
从我的 feed 模块重定向到我的 store_article 模块有效。
我的 feed_nav_graph.xml 看起来像这样:
<fragment
android:id="@+id/newsDetailFragment"
android:name="news.feed.view.ui.NewsDetailFragment"
tools:layout="@layout/fragment_news_detail">
<argument
android:name="article"
app:argType="feed.model.Article" />
<action
android:id="@+id/action_newsDetailFragment_to_storedArticleScreenFragment"
app:destination="@id/storedArticleScreenFragment" />
</fragment>
<fragment
android:id="@+id/storedArticleScreenFragment"
android:name="news.stored_article.view.ui.StoredArticleScreenFragment"
android:label="Stored Articles"
tools:layout="@layout/fragment_stored_article_screen">
<argument
android:name="article"
app:argType=".core.Article" />
</fragment>
现在如何从我的 store_article 模块访问数据 class 对象?
我不能这样做 val args: StoredArticleScreenFragmentArgs by navArgs()
因为我必须导入 feed 模块,这会导致循环依赖错误。
class StoredArticleScreenFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
}
我敢打赌这是因为 Article
模型(app:argType="news.feed.model.Article"
在 StoredArticleScreenFragment
中)。你应该在 store_article
-module 中使用一个额外的模型来避免循环依赖。所以 storedArticleScreenFragment
应该有自己的模型来告诉调用者片段需要什么参数。
我发现解决方案是使用与 stored_articles_nav_graph.xml 中的参数完全相同的片段声明来自 stored_article模块。
来自 stored_article 模块的 stored_articles_nav_graph.xml 看起来像这样:
<fragment
android:id="@+id/storedArticleScreenFragment"
android:name="stored_article.view.ui.StoredArticleScreenFragment"
android:label="Stored Articles"
tools:layout="@layout/fragment_stored_article_screen">
<argument
android:name="article"
app:argType=".core.Article" />
</fragment>
现在,我可以调用 navArgs()
从 feed 模块获取发送文章对象。
class StoredArticleScreenFragment : Fragment() {
private val args: StoredArticleScreenFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val article: Article = args.article
}
}
我正在使用 Android 导航组件和单个 Activity 架构。我想从模块 A 向模块 B 发送数据 class 对象。
我的 feed 模块在 build.gradle 中导入 store_article模块。
从我的 feed 模块重定向到我的 store_article 模块有效。
我的 feed_nav_graph.xml 看起来像这样:
<fragment
android:id="@+id/newsDetailFragment"
android:name="news.feed.view.ui.NewsDetailFragment"
tools:layout="@layout/fragment_news_detail">
<argument
android:name="article"
app:argType="feed.model.Article" />
<action
android:id="@+id/action_newsDetailFragment_to_storedArticleScreenFragment"
app:destination="@id/storedArticleScreenFragment" />
</fragment>
<fragment
android:id="@+id/storedArticleScreenFragment"
android:name="news.stored_article.view.ui.StoredArticleScreenFragment"
android:label="Stored Articles"
tools:layout="@layout/fragment_stored_article_screen">
<argument
android:name="article"
app:argType=".core.Article" />
</fragment>
现在如何从我的 store_article 模块访问数据 class 对象?
我不能这样做 val args: StoredArticleScreenFragmentArgs by navArgs()
因为我必须导入 feed 模块,这会导致循环依赖错误。
class StoredArticleScreenFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
}
我敢打赌这是因为 Article
模型(app:argType="news.feed.model.Article"
在 StoredArticleScreenFragment
中)。你应该在 store_article
-module 中使用一个额外的模型来避免循环依赖。所以 storedArticleScreenFragment
应该有自己的模型来告诉调用者片段需要什么参数。
我发现解决方案是使用与 stored_articles_nav_graph.xml 中的参数完全相同的片段声明来自 stored_article模块。
来自 stored_article 模块的 stored_articles_nav_graph.xml 看起来像这样:
<fragment
android:id="@+id/storedArticleScreenFragment"
android:name="stored_article.view.ui.StoredArticleScreenFragment"
android:label="Stored Articles"
tools:layout="@layout/fragment_stored_article_screen">
<argument
android:name="article"
app:argType=".core.Article" />
</fragment>
现在,我可以调用 navArgs()
从 feed 模块获取发送文章对象。
class StoredArticleScreenFragment : Fragment() {
private val args: StoredArticleScreenFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val article: Article = args.article
}
}