Введение:
Я создаю простое приложение в Jetpack Compose. В разделе «Главная страница» приложения я показываю список элементов. Ничего особенного.
Я делаю это с помощью специальной карточки внутри LazyColumn.
Проблема:
Когда приложение загружается, отображается список, а затем элементы отображаются в первый раз. Затем я прокручиваю вниз, и все элементы отображаются в пользовательской карточке так, как и ожидалось.
Проблема возникает, когда я прокручиваю вверх, а затем снова прокручиваю вниз, в основном перекомпонуя/перерисовывая элементы.
Затем изображение пользовательской карточки игнорирует его ContentScale и его модификатор полностью и нарушает макет. Что-то крайне странное.
Что я пробовал:
Сначала я пытался создать собственную карту со столбцами и строками.
Затем я создал его с помощью ConstraintLayout.
Пытался запомнить модификатор.
Чего я пытаюсь достичь:
Обычай card, где оно имеет определенную высоту (180.dp) и fillMaxWidth.
Изображение должно быть размещено на начало пользовательской карточки, ее высота и ширина также должны быть фиксированными (например, ширина: 124.dp, высота: 180.dp).
Изображения и графическое пояснение происходящего:
Этот элемент отображается впервые. в LazyColumn
Это второй раз, по сути, снова прокручивал вверх и вниз. В этом случае contentScale полностью исчез.
Также обратите внимание на радиус угла (.clip ) изображения при первом показе элемента.
Угловой радиус (.clip) исчез при втором отображении элемента, поэтому, по сути, модификаторы также исчезают.
MRE:
Единственная особенность изображения заключается в том, что оно приходит в ответ в виде строки base64 , и оно преобразуется из него в растровое изображение. Вот почему я использую Image, а не Coil (AsyncImage) для отображения изображения.
Я не могу разместить строку base64 для этого MRE из-за ее длины.
Для проверки конвертируйте изображение в строку base64.
data class ProductDisplayData(
val id: Int,
val name: String,
val description: String,
val size: String,
val ownerName: String,
val ownerID: Int,
val price: String,
val category: String,
val brand: String,
val tags: List,
val image: Bitmap?
)
val products = listOf(
ProductDisplayData(
id = 0,
name = "Polo",
description = "Nice slim fit polo shirt, perfect for casual wear, available in multiple colors",
size = "Small",
price = "120",
image = bitmapFromBase64String,
brand = "Boss",
category = "Shirts",
tags = listOf("Shirts", "Boss", "Slim fit", "Casual", "Polo", "Small"),
ownerName = "John Doe",
ownerID = 0
)
//repeat it until the list overflows...
)
@Composable
fun HomeScreen() {
LazyColumn(
modifier = Modifier.fillMaxWidth(),
contentPadding = PaddingValues(vertical = 16.dp),
) {
items(products) { product ->
ProductCard(
data = product
) { productSelected ->
// do action... irrelevant for this issue.
}
}
}
}
Очень интересная деталь: если я протестирую его с помощью катушки (AsyncImage), применяя жестко закодированный URL-адрес, этой проблемы не произойдет, и он будет работать правильно. Я столкнулся с ошибкой androidx.compose.foundation.Image?
Введение: Я создаю простое приложение в Jetpack Compose. В разделе «Главная страница» приложения я показываю список элементов. Ничего особенного. Я делаю это с помощью специальной карточки внутри LazyColumn. Проблема: Когда приложение загружается, отображается список, а затем элементы отображаются в первый раз. Затем я прокручиваю вниз, и все элементы отображаются в пользовательской карточке так, как и ожидалось.
Проблема возникает, когда я прокручиваю вверх, а затем снова прокручиваю вниз, в основном перекомпонуя/перерисовывая элементы. Затем изображение пользовательской карточки игнорирует его ContentScale и его модификатор полностью и нарушает макет. Что-то крайне странное.
Что я пробовал: [list] [*]Сначала я пытался создать собственную карту со столбцами и строками.
[*]Затем я создал его с помощью ConstraintLayout.
[*]Пытался запомнить модификатор.
[/list] Чего я пытаюсь достичь: [list] [*]Обычай card, где оно имеет определенную высоту (180.dp) и fillMaxWidth. [*]Изображение должно быть размещено на начало пользовательской карточки, ее высота и ширина также должны быть фиксированными (например, ширина: 124.dp, высота: 180.dp).
Код пользовательской карты: [code]@Composable fun ProductCard( data: ProductDisplayData, onClick: (ProductDisplayData) -> Unit = {} ) {
[*]Этот элемент отображается впервые. в LazyColumn [img]https://i.sstatic.net/V0d2zHFt.png[/img]
[*]Это второй раз, по сути, снова прокручивал вверх и вниз. В этом случае contentScale полностью исчез. [img]https://i.sstatic.net/XI2agZUc.png[/img]
[*]Также обратите внимание на радиус угла (.clip ) изображения при первом показе элемента. [img]https://i.sstatic.net/oTp8B4TA.png[/img]
[*]Угловой радиус (.clip) исчез при втором отображении элемента, поэтому, по сути, модификаторы также исчезают. [img]https://i.sstatic.net/19vwFUA3.png[/img]
[/list]
MRE: Единственная особенность изображения заключается в том, что оно приходит в ответ в виде строки base64 , и оно преобразуется из него в растровое изображение. Вот почему я использую Image, а не Coil (AsyncImage) для отображения изображения. Я не могу разместить строку base64 для этого MRE из-за ее длины.
Для проверки конвертируйте изображение в строку base64.
Код ProductCard опубликован выше. [code]data class ProductDisplayData( val id: Int, val name: String, val description: String, val size: String, val ownerName: String, val ownerID: Int, val price: String, val category: String, val brand: String, val tags: List, val image: Bitmap? )
val products = listOf( ProductDisplayData( id = 0, name = "Polo", description = "Nice slim fit polo shirt, perfect for casual wear, available in multiple colors", size = "Small", price = "120", image = bitmapFromBase64String, brand = "Boss", category = "Shirts", tags = listOf("Shirts", "Boss", "Slim fit", "Casual", "Polo", "Small"), ownerName = "John Doe", ownerID = 0 ) //repeat it until the list overflows...
) { items(products) { product -> ProductCard( data = product ) { productSelected -> // do action... irrelevant for this issue. } } } } [/code] [b]Очень интересная деталь: если я протестирую его с помощью катушки (AsyncImage), применяя жестко закодированный URL-адрес, этой проблемы не произойдет, и он будет работать правильно. Я столкнулся с ошибкой androidx.compose.foundation.Image?[/b]
Я пытаюсь добавить новую функцию в пример проекта создания (список сообщений), для которого мне нужно вызвать новый веб-сервис, который извлекает сообщения на основе тега.
Чтобы реализовать эту функцию, я подумал о добавлении нового PagingSource...
Два столбца, каждый из которых занимает всю высоту страницы.
Столбец 1 содержит элементы как объекты Row.
Столбец 2 также содержит элементы как объекты Row, но каждая строка содержит несколько контейнеров , и...
Два столбца, каждый из которых занимает всю высоту страницы.
Столбец 1 содержит элементы как объекты Row.
Столбец 2 также содержит элементы как объекты Row, но каждая строка содержит несколько контейнеров , и...
Я создал игру «крестики-нолики», используя React и Tailwind CSS. Компоновка платы работает должным образом при просмотре в режиме мобильной эмуляции в браузере моего настольного компьютера, как показано на этом снимке экрана. Однако при доступе...