我的应用程序中有两个屏幕。Paging3第一个屏幕通过使用垂直网格中的库显示设备上的图像列表。现在,当用户单击图像时,我将单击位置传递到第二个屏幕,我在第二个屏幕上使用HorizontalPager伴奏来全屏显示图像。两个屏幕共享相同的 ViewModel 以使用Paging3.
在 HorizontalPager 中显示图像的代码如下所示。
val images: LazyPagingItems<MediaStoreImage> =
viewModel.getImages(initialLoadSize = args.currentImagePosition + 1, pageSize = 50)
.collectAsLazyPagingItems()
val pagerState = rememberPagerState(initialPage = currentImagePosition)
Box(modifier = modifier) {
HorizontalPager(
count = images.itemCount,
state = pagerState,
itemSpacing = 16.dp
) { page ->
ZoomableImage(
modifier = modifier,
imageUri = images[page]?.contentUri
)
}
}
Run Code Online (Sandbox Code Playgroud)
这里,currentImagePosition是在第一个屏幕上单击的图像的索引。我正在设置initialLoadSize确保currentImagePosition + 1分页库已获取要显示的单击图像。
当第二个屏幕打开时,单击的图像将按预期全屏显示。但是,当用户滑动获取下一个图像时,不会加载下一个图像,而是随着50用户进一步滑动而加载带有索引等的图像。
我不确定我在这里缺少什么。任何帮助将不胜感激。
编辑:添加了 ViewModel、存储库和分页代码
视图模型
fun getImages(initialLoadSize: Int = 50): …Run Code Online (Sandbox Code Playgroud) android android-jetpack-compose jetpack-compose-accompanist android-jetpack-compose-pager
使用 Jetpack Compose 和伴奏寻呼机,我尝试创建一个HorizontalPager位置:
Pager项目有最大宽度作为一个例子,我编写了以下代码(为了简单起见,我制作了Text物品,但实际上,我实际上制作了更复杂的Card物品):
@Composable
fun MyText(modifier: Modifier) {
Text(
text = LOREM_IPSUM_TEXT,
modifier = modifier
.wrapContentHeight()
.border(BorderStroke(1.dp, Color.Red))
)
}
@ExperimentalPagerApi
@Composable
fun MyPager(pagerItem: @Composable () -> Unit = {}) {
Scaffold {
Column(
modifier = Modifier
.fillMaxSize()
// In case items in the VP are taller than the screen -> scrollable
.verticalScroll(rememberScrollState())
) {
HorizontalPager(
contentPadding = PaddingValues(32.dp),
itemSpacing = 16.dp,
count = 3,
) { …Run Code Online (Sandbox Code Playgroud) android android-jetpack-compose android-jetpack-compose-list jetpack-compose-accompanist android-jetpack-compose-pager
我是新作曲家,目前在尝试创建HorizontalPager. 以前显示的是分页器项目填充宽度,然后高度与宽度相同:
Surface(
modifier = Modifier
.fillMaxWidth()
.aspectRatio(1.0f),
elevation = 16.dp
) { ... }
Run Code Online (Sandbox Code Playgroud)
现在我需要更改它,以便该项目仍然填充宽度但高度包裹内容,然后每个项目的高度都被平均到最高的项目。另外我希望最小高度与宽度相同。
我发现了类似内在测量的东西,但当尝试使用它时什么也没发生:
Surface(
modifier = Modifier
.fillMaxWidth()
.height(IntrinsicSize.Min),
elevation = 16.dp
) { ... }
Run Code Online (Sandbox Code Playgroud)
我也不知道如何将最小高度设置为与宽度相同
android android-jetpack-compose android-jetpack-compose-pager