android - 在不调用 recompose 的情况下,如何更新 jetpack 中的特定 ui 组件?
问题描述
在我的 UI 中,我有一个圆形进度条,进度每秒更新一次。该 UI 中的其他文本保持不变(静态)。我只想更新进度条,而不是重新组合整个屏幕。我怎样才能做到这一点?
解决方案
您需要将屏幕拆分为不同的可组合项,以便当状态值更改时,依赖于该状态的所有视图都被分组到一个可组合项中。
看一下这个代码的例子:
@Composable
fun TestScreen(
) {
var progress by remember { mutableStateOf(0f) }
var otherStateValue by remember { mutableStateOf("") }
Box {
SomeTextView(otherStateValue)
ProgressView(progress)
}
}
@Composable
fun SomeTextView(text: String) {
}
@Composable
fun ProgressView(progress: Float) {
}
如果任何和值发生变化,TestScreen
则将重新组合。但是如果自上次重组后没有改变,将被缓存并且不会被重组。progress
text
text
SomeTextView
有关重组如何工作的更多详细信息,请参阅撰写心智模型。
此外,如果您明智地构建视图,而不直接在代码中使用任何副作用(查看副作用文档以获取更多详细信息)并使用 /view model/etc 缓存计算结果remember
(查看撰写文档中的状态),然后重新组合将是一个非常轻松的操作。
推荐阅读
- javascript - 用子组件状态响应提交数据
- python-sphinx - Sphinx 文档中的人类可读迭代
- list-comprehension - 使用列表推导消除列表中包含另一个列表中的子字符串的字符串
- simulation - 如何在 SUMO 中改变边缘的交通流向?
- scala - 是否可以使用宏来修改生成的结构化类型实例调用代码?
- pdf - 使用 CA 服务设置服务器以验证我的组织发布的 PDF 的过程
- python - Tkinter 检查按钮在选中时更新,但在我取消选中时不更新
- wordpress - 如何使用模式 - WordPress
- javascript - 试图在页面滚动时对背景产生一些影响
- javascript - 如何从 TS/JS 中的方法或构造函数获取返回值?