Ann*_*non 10 android android-jetpack-compose jetpack-compose-accompanist
我SwipeRefresh在撰写中使用视图(来自accompanist)。我在LazyVerticalGrid里面,网格填充来自网络的分页数据。如果分页数据中没有内容,我将显示空状态视图。当有一些数据时,滑动刷新功能就会起作用。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
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
The*_*der 16
正如 Accompanist 在其文档 SwipeRefresh中所述,需要一些可滚动的内容,以便能够对滑动手势做出反应。
因此,也许 Compose 元素太少会自动使LazyColumn/LazyVerticalGrid不可滚动以优化内容?
我最好的猜测是当您没有可显示的项目时显示可滚动列,否则显示可滚动列LazyVerticalGrid。
SwipeRefresh(...) {
if (loadState.refresh is LoadState.NotLoading && loadState.append.endOfPaginationReached && posts.itemCount < 1) {
Column(Modifier.verticalScroll(rememberScrollState())) {
NoContentView(Modifier.fillMaxSize())
}
} else {
LazyVerticalGrid(...) {
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3929 次 |
| 最近记录: |