条件片段和导航重用
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 的片段