Jetpack Compose 自定义布局点击不起作用
Jetpack Compose custom layout clicks don't work
我创建了自己的 class,名为 MyInputRow。
@Composable
fun MyInputRow(
title: String,
modifier: Modifier = Modifier,
bgColor: Color,
icon: Painter,
clickAction: Unit
) {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(6.dp)
.background(color = bgColor)
.clickable { clickAction },
verticalAlignment = Alignment.CenterVertically,
)
{
Text(
modifier = Modifier
.weight(1f)
.padding(6.dp)
.wrapContentWidth(Alignment.Start),
text = title,
)
Image(
painter = icon,
contentDescription = "icon"
)
}
}
但是,这个 clickAction 不起作用。
具体来说就是在显示画面的时候因为某些原因调用了clickAction,点击Row的时候没有调用clickAction。
调用如下。
class AddActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
...
setContent {
MyTheme {
...
AddMain()
}
}
}
}
@Composable
fun AddMain() {
BarcodeLayout()
},
}
@Composable
fun BarcodeLayout() {
Column(Modifier.fillMaxWidth()) {
Text(text = {...})
MyInputRow(
title = ...,
bgColor = ...,
icon = ...,
clickAction = scanBarcode()
)
}
}
fun scanBarcode() {
Timber.d("call scanBarcode")
}
我不知道为什么。请帮助我。
您可以尝试 2 个选项。
选项 1:
.clickable { clickAction() }
或选项 2:
.clickable(clickAction)
我创建了自己的 class,名为 MyInputRow。
@Composable
fun MyInputRow(
title: String,
modifier: Modifier = Modifier,
bgColor: Color,
icon: Painter,
clickAction: Unit
) {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(6.dp)
.background(color = bgColor)
.clickable { clickAction },
verticalAlignment = Alignment.CenterVertically,
)
{
Text(
modifier = Modifier
.weight(1f)
.padding(6.dp)
.wrapContentWidth(Alignment.Start),
text = title,
)
Image(
painter = icon,
contentDescription = "icon"
)
}
}
但是,这个 clickAction 不起作用。
具体来说就是在显示画面的时候因为某些原因调用了clickAction,点击Row的时候没有调用clickAction。
调用如下。
class AddActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
...
setContent {
MyTheme {
...
AddMain()
}
}
}
}
@Composable
fun AddMain() {
BarcodeLayout()
},
}
@Composable
fun BarcodeLayout() {
Column(Modifier.fillMaxWidth()) {
Text(text = {...})
MyInputRow(
title = ...,
bgColor = ...,
icon = ...,
clickAction = scanBarcode()
)
}
}
fun scanBarcode() {
Timber.d("call scanBarcode")
}
我不知道为什么。请帮助我。
您可以尝试 2 个选项。
选项 1:
.clickable { clickAction() }
或选项 2:
.clickable(clickAction)