【问题标题】:Android Compose how to update other Composable function better way?Android Compose 如何更好地更新其他 Composable 功能?
【发布时间】:2021-12-25 13:21:51
【问题描述】:

Screenshot

我只是想点击按钮可以记录 ComposableB()。或者类似这样,例如,如果你点击 ComposableA,ComposableB 将启动动画而不是更新数据。

【问题讨论】:

标签: android kotlin onclick android-jetpack-compose


【解决方案1】:

虽然通常建议使用 Compose 将事件传递给应用程序逻辑(如 ViewModel)而不是应用程序 UI (Thinking in Compose),但如果您确实需要这样做,您的代码如下所示:

import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue

@Composable
fun ComposableA() {
    var addLogEntry by remember { mutableStateOf(false) }

    Column {
        Button(onClick = {
            addLogEntry = true
        }) {
            Text(text = "Log")
        }
        ComposableB(addLogEntry = addLogEntry) {
            addLogEntry = false
        }
    }
}

@Composable
fun ComposableB(
    addLogEntry: Boolean,
    onLogEntryAdded: () -> Unit
) {
    if (addLogEntry) {
        Log.d("Shadowmeld", "onAddLogEntry")
        onLogEntryAdded()
    }
}

在这里,您将一个函数作为第二个参数(onLogEntryAdded,采用 lambda 表达式格式)传递给 ComposableB。这个传递的 lambda 表达式将从 ComposableB 调用以修改 ComposableA 中的状态。

我相信有更好的方法可以做到这一点,例如在 ComposableA 中声明 ComposableB(将状态提升到 ComposableA),或者,如果这不是一个选项,则将 Button onClick 事件传递给 ComposableA 和 ComposableB 都可以观察到的 ViewModel。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-09
    • 2021-08-13
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多