【发布时间】:2020-08-17 00:31:19
【问题描述】:
在正常的 Xml 活动构建中存在一个 <include> 属性,允许在不同的活动中重用设计,例如顶部和底部栏。我一直在 Jetpack Compose 中寻找类似的东西,但我找不到任何东西。
我知道@Composable 函数作为独立元素工作,可以随时使用,但如果我使用这种方法,这些元素将在活动更改时重新加载。
【问题讨论】:
标签: android android-jetpack-compose
在正常的 Xml 活动构建中存在一个 <include> 属性,允许在不同的活动中重用设计,例如顶部和底部栏。我一直在 Jetpack Compose 中寻找类似的东西,但我找不到任何东西。
我知道@Composable 函数作为独立元素工作,可以随时使用,但如果我使用这种方法,这些元素将在活动更改时重新加载。
【问题讨论】:
标签: android android-jetpack-compose
没有必要:只需调用定义了要使用的设计/布局的函数即可。
在传统的 Android 布局中,需要 <include> 标签,因为 XML 没有“调用”另一个 XML 文件的任何概念。在 Compose 中,每个布局和每个组件都是一个函数,因此您可以在任何想要重用该布局的地方简单地调用该函数。
将可组合函数的内容直接包含在另一个可组合函数中与调用该可组合函数之间几乎没有区别(运行时的内部簿记略有不同,但通常 Compose 的用户无需担心)。
实际上,您可以标记一个可组合函数inline 来更直接地实现这一点,并将内容内联到调用函数中。
【讨论】:
<include> 也是如此:它将在每个使用它的布局中重新膨胀。
remember 和相关属性,可以根据状态变化确定哪些可组合项需要重新评估。 Compose 可以确定这在渲染 UI 方面意味着什么。一般来说,我们不再担心“这些元素会在活动发生变化时重新加载”,而是使用可组合的函数简单地描述我们想要的 UI。