У меня есть требование отображать разные изображения на основе определенных взаимодействий с пользователем. Итак, я сохраняю идентификатор ресурса для рисования в целочисленной переменной. Однако, когда я передаю эту переменную в функцию 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)
Я думаю, что если вы собираетесь использовать painterResource
, ресурс должен быть векторным или аналогичным XML, в противном случае вам, вероятно, придется использовать imageResource
@GabrieleMariotti, чтобы я мог переназначить значение на основе определенных взаимодействий с пользователем. Как указал z.y, мне действительно следует использовать здесь переменную Mutable State. И img1 является векторным рисунком.
@RichardOnslowRoper, да, это векторный рисунок.
Предоставленный вами код работает «как есть», используя доступные чертежи в моем конце, если вы не включите более подробную информацию, тогда мы можем только догадываться, но когда вы сказали
У меня есть требование отображать разные изображения на основе определенных взаимодействий с пользователем. …
и
… 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)
}
Логика немного бесполезна, но она пытается указать на использование изменяемого состояния для повторной компоновки компонуемого.
Я перенес тот же код в новый проект, и изображение отобразилось нормально. Я думаю, что это должно быть какая-то проблема с конфигурацией предыдущего проекта. И да, в этом случае мне действительно следует использовать MutableState. Спасибо!
Вы не могли бы просто сказать: «Инициализируйте переменную держателя изображения как держатель состояния MutableState<T>
в паре с remember
, поскольку мы находимся в рамках Composable».
Почему вы используете
var imageToDisplay = img
? Каково точное условие, которое вы используете? Что за ресурсR.drawable.img1
?