Jetpack 组成没有片段的导航架构?

Posted

技术标签:

【中文标题】Jetpack 组成没有片段的导航架构?【英文标题】:Jetpack compose navigation architecture without fragment? 【发布时间】:2021-04-09 01:27:22 【问题描述】:

我对@9​​87654321@ 记录的新 Jetpack compose 导航组件 androidx.navigation:navigation-compose 有点困惑。

在使用 Jetpack Compose 时,我是否可以说具有 0 个片段的单活动架构优于具有多个片段的单活动架构?

我知道我们仍然可以以这种方式使用片段和 Jetpack 组合:

class MyFragment: Fragment() 
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View 
        return ComposeView(requireContext()).apply
            setContent 
                MyFragmentComposable()
            
        
    

但我想确保在使用 androidx.navigation:navigation-compose 时,我们不应该再使用片段,像这样开始:

class MainActivity : AppCompatActivity() 
    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContent 
            MyApp()
        
    

【问题讨论】:

【参考方案1】:

是的,你是对的。优选不使用片段。您可以使用NavHost 来声明您的导航图。

【讨论】:

PreferenceFragmentCompat 的设置怎么样?我们必须手动编码设置吗?我在 Jetpack Compose 文档中没有看到任何有关设置的信息。 我对偏好一无所知,但如果您需要与旧视图系统的互操作性,您现在可能应该坚持使用片段。您可以查看Crane compose sample 在 Compose 中使用 Android 视图 我明白了。老实说,我认为不再需要像 Jetpack compose 那样保持生命周期。例如,屏幕可以在配置更改下完全重构,而不是破坏活动。那会简单得多。但我可能错过了一些东西。 答案只是一种观点还是依赖于 Android 开发者网站上指出的任何信息? @rocknow android 文档建议使用 compose 导航库 (developer.android.com/jetpack/compose/navigation)。在仅撰写应用程序中使用片段很笨拙,并且会增加多余的样板。

以上是关于Jetpack 组成没有片段的导航架构?的主要内容,如果未能解决你的问题,请参考以下文章

Android Jetpack导航,另一个主机片段内的主机片段

使用 Jetpack 的 Android 导航组件销毁/重新创建的片段

带有片段和 Jetpack 导航的 Viewpager2:恢复片段而不是重新创建它们

Android Jetpack 导航禁用滚动位置

Jetpack导航。改变每个片段的工具栏按钮

Jetpack 导航到一个共同的目的地