Jetpack compose 不会在 mutableStateOf 更改时重新组合

时间:2021-06-08 18:26:27

标签: android kotlin android-jetpack-compose

我想构建一个非常简单的演示。一个可以点击的按钮,它计算点击次数。

代码如下:

class MainActivity : ComponentActivity() {
    private var clicks = mutableStateOf(0)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
           Surface(color = MaterialTheme.colors.background) {
                NewsStory(clicks.value) { onClick() }
           }
        }
    }

    private fun onClick() {
        clicks.value++
    }
}

@Composable
fun NewsStory(clicks: Int, onClick: () -> Unit) {
    Column(modifier = Modifier.padding(8.dp)) {
        Button(onClick = onClick) {
            Text("Clicked: $clicks")
        }
    }
}

根据我的理解,每次点击按钮时都应该重新组合,因为 clicks 已更改。

但它不起作用,有什么想法我在这里做错了吗?

我正在使用 androidx.activity:activity-compose:1.3.0-beta01,kotlin 1.5.10 并编写版本 1.0.0-beta08

2 个答案:

答案 0 :(得分:1)

每次都需要使用“remember”关键字进行重组,如下所述:https://foso.github.io/Jetpack-Compose-Playground/general/state/

简而言之,你的可组合看起来像这样:

    @Composable
fun NewsStory (){
val clickState = remember { mutableStateOf(0) }
Column (modifier = Modifier.padding(8.dp)) {
        Button(
            onClick = { clickState.value++ }) {
        }
        Text("Clicked: $clickState.value.toString()")
    }
}

答案 1 :(得分:0)

代码应该可以工作,尝试清理您的项目并重建它。