【发布时间】:2023-01-08 03:37:31
【问题描述】:
我正在尝试在垂直网格中实现分页。我已经使用 lazyColumn (https://github.com/alirezaeiii/TMDb-Compose/blob/main/app/src/main/java/com/android/sample/tmdb/ui/paging/PagingScreen.kt) 成功构建了它,但由于某些原因它不适用于 lazyVerticalGrid。这是我的代码:
@Composable
fun <T : TMDbItem> PagingScreen(viewModel: BasePagingViewModel<T>) {
val lazyTMDbItems = viewModel.pagingDataFlow.collectAsLazyPagingItems()
LazyVerticalGrid(
columns = GridCells.Fixed(COLUMN_COUNT),
contentPadding = PaddingValues(
start = GRID_SPACING,
end = GRID_SPACING,
bottom = WindowInsets.navigationBars.getBottom(LocalDensity.current).toDp().dp.plus(
GRID_SPACING
)
),
horizontalArrangement = Arrangement.spacedBy(GRID_SPACING, Alignment.CenterHorizontally),
content = {
items(lazyTMDbItems.itemCount) { index ->
val tmdbItem = lazyTMDbItems.peek(index)
tmdbItem?.let {
TMDbItemContent(
tmdbItem,
Modifier
.height(320.dp)
.padding(vertical = GRID_SPACING)
)
}
}
lazyTMDbItems.apply {
when {
loadState.refresh is LoadState.Loading -> {
item { LoadingView(modifier = Modifier.fillMaxSize()) }
}
loadState.append is LoadState.Loading -> {
item { LoadingItem() }
}
loadState.refresh is LoadState.Error -> {
val e = lazyTMDbItems.loadState.refresh as LoadState.Error
item {
ErrorScreen(
message = e.error.localizedMessage!!,
modifier = Modifier.fillMaxSize(),
refresh = { retry() }
)
}
}
loadState.append is LoadState.Error -> {
val e = lazyTMDbItems.loadState.append as LoadState.Error
item {
ErrorScreen(
message = e.error.localizedMessage!!,
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
refresh = { retry() }
)
}
}
}
}
})
}
它加载第一个两页,但不加载第三页和更高版本,我的实现中是否缺少任何内容?代码可以在这里找到:https://github.com/alirezaeiii/TMDb-Compose/tree/Pagination-grid
【问题讨论】:
标签: android android-jetpack-compose android-paging-3