Anonymous
LazyColumn перекомпоновывается при выборе для передачи URL-адреса в AsyncImage
Сообщение
Anonymous » 20 окт 2024, 12:54
Новичок в создании 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
1729418074
Anonymous
Новичок в создании Jetpack. Может ли кто-нибудь объяснить, почему, когда я выбираю элемент в LazyRow и передаю этот URL-адрес изображению, он снова перекомпоновывает всю строку? КАК мне следует использовать переменную MovieSelector? [code]@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) ) } [/code] Я пытаюсь отобразить изображение, выбранное пользователем из ленивой строки, оно обновило изображение, но также изменило структуру списка фильмов. Подробнее здесь: [url]https://stackoverflow.com/questions/79105462/lazycolumn-recomposed-when-selected-to-pass-url-to-asyncimage[/url]