标签: android-jetpack-compose-pager

Jetpack Compose 中带有 Paging3 的水平寻呼机

我的应用程序中有两个屏幕。Paging3第一个屏幕通过使用垂直网格中的库显示设备上的图像列表。现在,当用户单击图像时,我将单击位置传递到第二个屏幕,我在第二个屏幕上使用HorizontalPager伴奏来全屏显示图像。两个屏幕共享相同的 ViewModel 以使用Paging3.

在 Horizo​​ntalPager 中显示图像的代码如下所示。

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

7
推荐指数
1
解决办法
5953
查看次数

Jetpack Compose - 具有最大宽度的项目的 Horizo​​ntalPager 项目间距/填充

使用 Jetpack Compose 和伴奏寻呼机,我尝试创建一个HorizontalPager位置:

  1. 显示当前项目左侧和右侧项目的边缘
  2. 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

5
推荐指数
1
解决办法
8738
查看次数

组合具有相同高度但最小项目宽度的水平寻呼机项目

我是新作曲家,目前在尝试创建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

5
推荐指数
1
解决办法
2071
查看次数