LazyColumn перекомпоновывается при выборе для передачи URL-адреса в AsyncImageAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 LazyColumn перекомпоновывается при выборе для передачи URL-адреса в AsyncImage

Сообщение Anonymous »

Новичок в создании Jetpack. Может ли кто-нибудь объяснить, почему, когда я выбираю элемент в LazyRow и передаю этот URL-адрес изображению, он снова перекомпоновывает всю строку? КАК мне следует использовать переменную MovieSelector?

Код: Выделить всё

@Composable
fun MovieHorizontalCarousel(viewModel: MovieViewModel = MovieViewModel()) {
val movies: LazyPagingItems = viewModel.movies.collectAsLazyPagingItems()

Column(
modifier = Modifier
.fillMaxSize()
) {

val movieSelector = remember { mutableStateOf("") }
Carousel(
movies = movies,
onMovieSelected = { url -> movieSelector.value = url },
Modifier
.fillMaxWidth()
.height(100.dp)
)

MoviePreview(
movieSelector.value,
modifier = Modifier
.fillMaxWidth()
.weight(1f)
)
}

}

@Composable
fun MoviePreview(url: String,
modifier: Modifier = Modifier) {
AsyncImage(
modifier = modifier
.fillMaxSize()
.background(Purple40),
model = url,
contentDescription = "Preview"
)
}

@Composable
fun Carousel(movies: LazyPagingItems,
onMovieSelected: (String) -> Unit,
modifier: Modifier = Modifier) {

LazyRow(
modifier = modifier
.wrapContentSize()
.background(Purple80),
//horizontalArrangement = Arrangement.spacedBy(8.dp),
verticalAlignment = Alignment.CenterVertically
) {
items (
count = movies.itemCount,
key = { index -> movies[index]?.id ?: index }
//key = movies.itemKey{ item -> item.id }
) { index ->
movies[index]?.let {
MovieCarouselItem(movie = it,
onMovieSelected = onMovieSelected)
}
}
}
}

@Composable
fun MovieCarouselItem (movie: Movie,
onMovieSelected: (String) -> Unit,
modifier: Modifier = Modifier) {

AsyncImage(
modifier = modifier
.size(81.dp)
.clickable {
onMovieSelected("https://image.tmdb.org/t/p/w500${movie.posterPath}")
},
model = "https://image.tmdb.org/t/p/w500${movie.posterPath}",
contentDescription = "Movie Thumbnail" ,
contentScale = ContentScale.Crop,
placeholder = painterResource(id = R.drawable.photo)
)
}
Я пытаюсь отобразить изображение, выбранное пользователем из ленивой строки, оно обновило изображение, но также изменило структуру списка фильмов.

Подробнее здесь: https://stackoverflow.com/questions/791 ... asyncimage
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»