Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 喷气背包';不要在变化的状态下重新组合_Android_Kotlin_Android Jetpack Compose - Fatal编程技术网

Android 喷气背包';不要在变化的状态下重新组合

Android 喷气背包';不要在变化的状态下重新组合,android,kotlin,android-jetpack-compose,Android,Kotlin,Android Jetpack Compose,我想建立一个非常简单的演示。一个你可以点击的按钮,它计算点击次数 代码如下所示: class MainActivity : ComponentActivity() { private var clicks = mutableStateOf(0) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent {

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

代码如下所示:

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")
        }
    }
}
    @Composable
fun NewsStory (){
val clickState = remember { mutableStateOf(0) }
Column (modifier = Modifier.padding(8.dp)) {
        Button(
            onClick = { clickState.value++ }) {
        }
        Text("Clicked: $clickState.value.toString()")
    }
}
根据我的理解,每次点击按钮时都应该重新组合,因为
点击
会发生变化

但它不起作用,你知道我做错了什么吗

我在androidx上。活动:活动组合:1.3.0-beta01、kotlin 1.5.10和组合版本1.0.0-beta08

您需要使用“记住”关键字,以便每次进行重新组合,如下所述:

简言之,您的组合将如下所示:

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")
        }
    }
}
    @Composable
fun NewsStory (){
val clickState = remember { mutableStateOf(0) }
Column (modifier = Modifier.padding(8.dp)) {
        Button(
            onClick = { clickState.value++ }) {
        }
        Text("Clicked: $clickState.value.toString()")
    }
}

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

谢谢您的回答。您将
val clickState=memory{mutableStateOf(0)}
放在可组合文件中,这是一个要求吗?在我的代码中,
clickState
在活动中,这也是可能的吗?如果我要使用ViewModel,我会把它放在哪里?记住关键字只在可组合中有效。如果要使用viewModel,则应将其作为参数传递给Composable,如本例所示:我刚刚尝试了清理和重建,但不幸的是,它没有工作:/