Почему изображение не отображается в Android Studio, когда целочисленная переменная, содержащая рисуемый объект, передается функции painterResource?

У меня есть требование отображать разные изображения на основе определенных взаимодействий с пользователем. Итак, я сохраняю идентификатор ресурса для рисования в целочисленной переменной. Однако, когда я передаю эту переменную в функцию 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)

1 ответ

Предоставленный вами код работает «как есть», используя доступные чертежи в моем конце, если вы не включите более подробную информацию, тогда мы можем только догадываться, но когда вы сказали

У меня есть требование отображать разные изображения на основе определенных взаимодействий с пользователем. …

и

… 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)
}

Логика немного бесполезна, но она пытается указать на использование изменяемого состояния для повторной компоновки компонуемого.