gpt4 book ai didi

android - 如果 LazyGridView 在撰写中没有子项,则滑动刷新不起作用

转载 作者:行者123 更新时间:2023-12-05 00:17:51 25 4
gpt4 key购买 nike

我正在使用 SwipeRefresh在 compose 中查看(来自 accompanist)。我有 LazyVerticalGrid在其中,网格填充来自网络的分页数据。如果分页数据中没有内容,我将显示空状态 View 。当有一些数据时,滑动刷新正在工作。问题是,我无法在 LazyVerticalGrid 中进行刷卡刷新如果没有数据,但在 LazyColumn 中同样有效(两种情况都有 NoContentView 所示)。

@Composable
fun GridItems(
searchViewModel: SearchViewModel
) {
var isRefreshing by remember { mutableStateOf(false) }
val posts = remember { searchViewModel.posts }.collectAsLazyPagingItems()

Scaffold(
topBar = { MyTopBar() }
) { innerPadding ->
SwipeRefresh(
state = rememberSwipeRefreshState(isRefreshing = isRefreshing),
onRefresh = { searchViewModel.getPosts() }
) {
Column(modifier = Modifier.padding(innerPadding)) {
LazyVerticalGrid(
cells = GridCells.Fixed(3),
modifier = modifier.padding(horizontal = 3.dp)
) {
items() {
MySinglePostItem()
}

posts.apply {
when {
//Other loadState here

// Show below view if no item is present in paging data
loadState.refresh is LoadState.NotLoading && loadState.append.endOfPaginationReached && posts.itemCount < 1 -> {
NoContentView(Modifier.fillMaxSize())
}
}
}
}
}
}
}
}

@Composable
fun NoContentView(modifier: Modifier = Modifier) {
Box(
modifier = modifier,
contentAlignment = Alignment.Center
) {
Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Image(
modifier = Modifier.size(48.dp),
painter = painterResource(id = R.drawable.ic_outlined_image_no_content)
)
Spacer(modifier = Modifier.height(4.dp))
Text(
text = stringResource(id = R.string.empty_posts_message),
fontSize = 15.sp
)
}
}
}

最佳答案

正如伴奏者在其 documentation 中所述SwipeRefresh需要一些可滚动的内容才能对滑动手势使用react。
因此,也许元素太少 Compose 会自动生成 LazyColumn/LazyVerticalGrid不可滚动以优化事物?
我最好的猜测是当您没有要显示的项目和 LazyVerticalGrid 时显示 Scrollable-Column否则。

SwipeRefresh(...) {
if (loadState.refresh is LoadState.NotLoading && loadState.append.endOfPaginationReached && posts.itemCount < 1) {
Column(Modifier.verticalScroll(rememberScrollState())) {
NoContentView(Modifier.fillMaxSize())
}
} else {
LazyVerticalGrid(...) {
// ...
}
}
}

关于android - 如果 LazyGridView 在撰写中没有子项,则滑动刷新不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70850651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com