我用jetpack编写了AppBarIcon元素,但是出现了错误: 调用@Composable函数的函数必须标记为@Composable“ 当我在onclick兰巴上调用可组合函数时。这是代码:
class testActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent { AppBarIcon(Image(10, 10) ) {
composableFunction()
}
}
}
}
@Composable()
fun composableFunction() {
}
这是一个真正的问题,因为我在运行时遇到了异常
是我想念的东西还是真正的错误?
答案 0 :(得分:1)
首先要注意的是Composable function must
仅 be called inside another Composable function
。
现在回到您的问题,接受该函数的onClick参数不是可组合函数。因此,无法在@Composable
中调用onClick
函数,因此会引发错误Functions which invoke @Composable functions must be marked with the @Composable
。
解决此问题的代码。
class testActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
var loadView = +state { false }
Column {
AppBarIcon(+imageResource(R.drawable.dashboard)) {
loadView.value = true
}
Text("Hey")
if (loadView.value)
composableFunction()
}
}
}
}
@Composable()
fun composableFunction() {
Text("appbar content")
}
原因是onClick不可组合:同时调用所有Composable函数可完全构成UI。而在组合好UI之后会调用onClick。因此,需要在onClick发生后使用状态来重新构成UI并加载可组合功能。