条件片段和导航重用

Posted

技术标签:

【中文标题】条件片段和导航重用【英文标题】:Condtional fragments and navigation reuse 【发布时间】:2018-12-05 03:46:06 【问题描述】:

给定 N 个片段代表同一实体的不同 UI。片段有条件地显示。该条件仅在运行时已知。每个片段应该有相同的导航流程。

如何使用导航架构组件 XML 图从片段中概括/抽象导航流以进一步重用?目前,我只看到为每个片段创建单独的目的地或嵌套导航的方式,但在重用方面这是一个糟糕的想法。另一种选择是在 Kotlin/Java 代码中进行所有条件转换,但在这种情况下,应用程序的流程将不会在导航图模式中描述。有没有更好的方法来重用导航?

官方文档在这个话题上很模糊:https://developer.android.com/topic/libraries/architecture/navigation/navigation-conditional

【问题讨论】:

我也有同样的经历请问您有什么解决办法吗? 有一个问题issuetracker.google.com/issues/80029773 尚未修复。想看的可以star一下。 我不明白问题跟踪器与问题的关系 对不起,我错过了这个问题。关于这个问题,我还没有找到一个优雅的方法,并且由于许多其他问题(如上面的链接),我放弃了 Navigation lib 并切换到github.com/ncapdevi/FragNav。 IMO 导航库尚未准备好。似乎进行动态图创建的唯一方法是编程。如果您愿意,您可以创建功能请求。 【参考方案1】:

片段可以与导航架构组件一起重复使用,以保持代码高效。

例如,我的 HomeFragment 中有一个名为 ContentFragment 的嵌套子片段,其中包含内容。我正在重新使用 ContentFragment 在单独的屏幕上显示不同类型的内容。

    在 NavGraph 设计工具中选择 New destination 以添加 Fragment。

    将参数传递给嵌套的 Fragment 和使用 NavGraph 启动的 Fragment,以便 Fragment 可以读取参数并为每种情况提供适当的逻辑。

a) 对于嵌套的 Fragment,我像在使用 Fragments 的导航组件时代之前一样通过 bundle 传递一个参数。

b) 对于新屏幕,我选择添加到 NavGraph 的片段,然后单击参数部分中的 + 按钮。然后您可以按照documentation 使用导航组件添加参数。

【讨论】:

在这种情况下如何处理导航方向?假设 ContentFragment 在 2 个导航图中使用。 @YellowJ,最好的策略是实现共享屏幕的嵌套导航图。 请参阅:Design navigation graphs 和 Nested navigation graphs

以上是关于条件片段和导航重用的主要内容,如果未能解决你的问题,请参考以下文章

重用 ViewPager 和 FragmentPagerAdapter 的片段

片段存储和重用:使用TabView的多个子片段

重用 GraphQL 片段

用于在多个活动/片段中重用的全局加载器 (LoaderManager)

jQuery Mobile 重用标题和导航

如何从片段到活动而不会干扰片段的可重用性