我正在尝试使用 LazyColumn 在列表中显示订单列表。这是代码:
@Composable
private fun MyOrders(
orders: List<Order>?,
onClick: (String, OrderStatus) -> Unit
) {
orders?.let {
LazyColumn {
items(
items = it,
key = { it.id }
) {
OrderDetails(it, onClick)
}
}
}
}
@Composable
private fun OrderDetails(
order: Order,
onClick: (String, OrderStatus) -> Unit
) {
println("Composing Order Item")
// Item Code Here
}
Run Code Online (Sandbox Code Playgroud)
这是我称之为可组合项的方法:
orderVm.fetchOrders()
val state by orderVm.state.collectAsState(OrderState.Empty)
if (state.orders.isNotEmpty()) {
MyOrders(state.orders) {
// Handle status change click listener
}
}
Run Code Online (Sandbox Code Playgroud)
我获取所有订单并显示在 LazyColumn 中。但是,当更新单个订单时,整个 …
我没有找到任何方法可以将 StickyHeader 与 LazyColumn 中的项目放在同一行:
因此,我使用 Box 将字母及其背景放在 LazyColumn 顶部,并使用 LazyListState 将其放在正确的位置:
@Preview
@Composable
fun InlineStickyList() {
val unsorted = listOf(...) // Pair("FirstName","LastName")
val data = unsorted.sortedBy { it.second[0] }
val groups = data.groupBy { it.second[0] }
@Composable
fun Person(pair: Pair<String, String>, showLetter: Boolean) {
Row(
modifier = Modifier
.fillMaxWidth()
.background(Color.White),
verticalAlignment = Alignment.CenterVertically
) {
Text(
"${pair.second[0]}",
modifier = Modifier
.padding(10.dp)
.alpha(if (showLetter) 1f else 0f),
fontSize = 20.sp
)
Text("${pair.first} ${pair.second}")
}
}
val state = rememberLazyListState()
Box(modifier …Run Code Online (Sandbox Code Playgroud) 我有一个 LazyColumn 保存一些项目。我听了来自 Room 的 Flow,一切都很好reverseLayout = true。当新项目插入数据库时,LazyColumn 滚动到底部并显示最后一个项目。但reverseLayout = true也会反转标题。所以我用 禁用了它reverseLayout = false。这不起作用,因为当插入项目时,它会显示在列表中,但列表不会滚动以显示底部项目。我必须手动滚动。
当 LazyColumn 因更改而重组时,如何滚动到底部项目items?
我认为我不需要放置代码,因为使用 LazyColumn 时都会出现问题,但如果这很重要,请告诉我,我可以编辑代码并发布它们!
我的 Android 应用程序内部有一个BottomSheetScaffold如下所示的内容:
BottomSheetScaffold(
sheetGesturesEnabled = false,
sheetContent = { MyContent() },
scaffoldState = bottomSheetScaffoldState,
) {
..
}
Run Code Online (Sandbox Code Playgroud)
设置为sheetGesturesEnabled后false,工作表不应可滑动。但是,如果MyContent()包含像 之类的可滚动组件LazyColumn,则仍然可以在模态底部表单上执行滑动关闭手势。
这怎么可能?这是一个已知的错误吗?有什么解决办法吗?
android kotlin bottom-sheet android-jetpack-compose lazycolumn
我将 AdManagerAdView 包装在 AndroidView 中,以便可以在 Jetpack Compose 中使用它。当我在 LazyColumn 中使用图像时,图像无法加载,并且 AdManagerAdView 尝试在可组合项出现在屏幕上之前加载图像。
如果我快速滚动到该元素,那么 LazyColumn 将其组合起来,并且在图像从广告服务器返回之前它就出现在屏幕上,它会按预期工作。
LazyColumn {
items(5) {
SomeOtherComposable(it)
}
item {
AndroidView(
modifier = Modifier
.width(300.dp)
.height(250.dp)
.background(Color.Green),
factory = { context ->
val adView = AdManagerAdView(context)
adView.adSize = AdSize.MEDIUM_RECTANGLE
adView.adUnitId = adUnitId
adView.loadAd(Builder().build())
adView
}
)
}
items(5) {
SomeOtherComposable(it)
}
}
Run Code Online (Sandbox Code Playgroud)
出于演示目的...
@Composable
fun SomeOtherComposable(i: Int) {
Text(
text = "SomeOtherComposable $i",
modifier = Modifier
.fillMaxWidth()
.height(320.dp)
.background(Color.White)
)
}
Run Code Online (Sandbox Code Playgroud)
如果在非延迟列或任何其他 Compose 布局中使用包装的 AdManagerAdView,这也可以正常工作。
This …
adview android-jetpack-compose android-jetpack-compose-list lazycolumn
问题::: 我想创建一个惰性列,一次只能选择或取消选择一个选项。现在,每当我单击惰性列内的行组件时,所有行都会被选中。
代码 :::
@Composable
fun LazyColumnWithSelection() {
var isSelected by remember {
mutableStateOf(false)
}
var selectedIndex by remember { mutableStateOf(0) }
val onItemClick = { index: Int -> selectedIndex = index }
LazyColumn(
modifier = Modifier.fillMaxSize(),
) {
items(100) { index ->
Row(modifier = Modifier
.fillMaxWidth()
.clickable {
onItemClick.invoke(index)
if (selectedIndex == index) {
isSelected = !isSelected
}
}
.padding(16.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically) {
Text(text = "Item $index", modifier = Modifier.padding(12.dp), color = Color.White)
if (isSelected) …Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack android-jetpack-compose lazycolumn
我当前的 Android Jetpack Compose 项目包含许多列表和网格。
我想对列表和网格的初始填充进行动画处理,为我的应用程序带来一些活力。
我找到了用于在列表中插入、删除项目等的文档。
但是,当列表首次显示时,我找不到任何动画细节。
首次填充列表或网格时是否可以添加动画?
android android-jetpack-compose lazycolumn jetpack-compose-animation
我想创建一个小信使,其中的消息从底部添加(新消息放置在列表的底部)。为了实现这一点,我将LazyColumnsreversedLayout属性设置为true。但如果我这样做,粘性标题也会被反转(就像粘性页脚一样)。如果我将属性设置verticalArrangement为, Bottom那么当键盘打开时,下面的消息不会保持焦点(它将转到下面的键盘)。此外,消息列表不是从最新的消息开始,而是从最旧的消息开始(就像从顶部开始滚动一样)。
StickyFooter 或将焦点保持在底部项目可以解决问题吗?我能为此做什么?
我写的代码:
LazyColumn(
modifier = Modifier
.fillMaxWidth()
.weight(1f),
contentPadding = PaddingValues(horizontal = 16.dp, vertical = 8.dp),
reverseLayout = true,
) {
val messages = state.messages.asReversed()
messages.forEachIndexed { index, message ->
val nextMessage = messages.getOrNull(index - 1)
val prevMessage = messages.getOrNull(index + 1)
val isNearToPrevious = isNear(message, prevMessage)
val isNearToNext = isNear(message, nextMessage)
item(message.id) {
GroupMessageItem(
message,
isNearToPrevious,
isNearToNext
)
}
if (!message.createdAt.isSameDayWith(prevMessage?.createdAt)) {
stickyHeader(key = "item: ${message.id}") { …Run Code Online (Sandbox Code Playgroud) 我将在每列的顶部放置一个标签,并Lazy\xd0\xa1olumn在底部放置一个标签。如下。
然而,当我填写完后,却出现了与我预想不同的画面:
\n\n我还需要设置什么吗?这是我的代码
\n@Composable\nfun MenuDetailList(\n loading: Boolean,\n type: String,\n items: List<Any>,\n page: Int,\n onChangeScrollPosition: (Int) -> Unit,\n onTriggerNextPage: () -> Unit,\n onCallCacheDialog: (Int) -> Unit\n) {\n val configuration = LocalConfiguration.current\n val screenHeight = configuration.screenHeightDp.dp\n\n Box(\n modifier = Modifier\n .background(color = MaterialTheme.colors.surface)\n ) {\n if (loading && items.isEmpty()) {\n LoadingShimmer(imageHeight = screenHeight)\n }else if (items.isEmpty()) {\n NothingHere()\n }else {\n ConstraintLayout(\n modifier = Modifier\n .fillMaxSize()\n .background(color = Color.White)\n ) {\n val (label, list) = createRefs()\n …Run Code Online (Sandbox Code Playgroud) lazycolumn ×10
android ×4
kotlin ×3
adview ×1
android-jetpack-compose-list ×1
bottom-sheet ×1
header ×1
sticky ×1