在Jetpack Compose中动态更改图标

6

我有两个“点赞”按钮的图标 - ic_thumb_upic_thumb_up_selected

图标的类型取决于offer.likedByUser参数。

var thumbIcon by remember {
    mutableStateOf(if (offer.likedByUser) R.drawable.ic_thumb_up_selected else R.drawable.ic_thumb_up)
}

IconButton(
    onClick = {
        offer.likedByUser = !offer.likedByUser
    } 
) {
    Image(painter = painterResource(id = thumbIcon) )
}

为什么它不能工作?

1个回答

13

这段代码

var thumbIcon by remember {
   mutableStateOf(if (offer.likedByUser) R.drawable.ic_thumb_up_selected else R.drawable.ic_thumb_up)
}

这个函数只运行一次,并将值设置为thumbs_up_selectedthumbs_up。在你的onClick处理程序中,你没有改变mutableStateOf,所以什么都不会发生。

你需要像这样进行更改

var thumbIconLiked by remember {
   mutableStateOf(offer.likedByUser)
}

IconButton(
    onClick = {
        thumbIconLiked = !thumbIconLiked
    } 
) {
    Image(
        painter = painterResource(
            id = if (thumbIconLIked) { 
                R.drawable.ic_thumb_up_selected 
            } else { 
                R.drawable.ic_thumb_up 
            },
            contenDescription = "thumb",
        )
    )
}

感谢您的解释。运行得很好。 - Wafi_ck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接