我需要根据特定的用户交互来显示不同的图像。因此,我将可绘制的资源ID存储在一个整数变量中。但是,当我将这个变量传递到图像的painterResource函数时,图像不会呈现。
代码如下:
val img = R.drawable.img1
val img2 = R.drawable.img2
// imageToDisplay is assigned based on certain conditions.
var imageToDisplay = img
Image(painter = painterResource(imageToDisplay), contentDescription = null)
发布于 2022-12-04 05:20:34
解决此问题的一种方法是使用Image组件的“资源”属性访问可绘制资源。然后,可以使用getDrawable函数根据存储在imageToDisplay变量中的资源ID检索可绘制文件。
下面是如何修改代码以实现此目的的示例:
val img = R.drawable.img1
val img2 = R.drawable.img2
// imageToDisplay is assigned based on certain conditions.
var imageToDisplay = img
Image(painter = painterResource(imageToDisplay), contentDescription = null)
或者,您也可以使用imageResource函数而不是painterResource来设置图像组件的可绘制资源。代码将如下所示:
val img = R.drawable.img1
val img2 = R.drawable.img2
// imageToDisplay is assigned based on certain conditions.
var imageToDisplay = img
Image(imageResource = imageToDisplay, contentDescription = null)
发布于 2022-12-04 07:30:03
您提供的代码正在使用可用的可绘图,除非您包含了更多的详细信息,我们只能猜测,但当您说
I需要根据特定的用户交互来显示不同的图像。…
和
…imageToDisplay是根据特定的条件分配的。
和
…当我将这个变量传递到图像的painterResource函数时,图像不会呈现。
我最好的猜测是,在执行某些条件操作时,由于某种原因,这些代码的可组合性不是重新组合的,也不是更新的。
再说一遍,我们只能猜测,所以你可以尝试这个或只是使用这个作为一个参考。
@Composable
fun DynamicImageComposable() {
val img = R.drawable.img
val img2 = R.drawable.img
// don't use ordinary variable, convert it to a mutable State instead
var imageToDisplay by remember {
mutableStateOf(img) // just use any drawable you want as the initial value
}
// when you change this to img2, this composable is expected to re-compose
imageToDisplay = img
Image(painter = painterResource(imageToDisplay), contentDescription = null)
}
逻辑有点无用,但它试图指出的是使用可变状态来进行可组合的重新组合。
https://stackoverflow.com/questions/74675941
复制