【问题标题】:Android. Compose, accompanist pager, how to start pager from specific position with infinite pager?安卓。作曲,伴奏寻呼机,无限寻呼机如何从特定位置开始寻呼机?
【发布时间】:2022-11-18 09:59:06
【问题描述】:

我正在使用com.google.accompanist:accompanist-pager 来实现页面的无限滚动。我按照 Horizo​​ntalPagerLoopingSample 中的描述实现了所有内容。 我需要从第三页开始显示我的寻呼机。但是当我设置 initialPage = 2 Horizo​​ntalPager 时显示错误的页面。 在示例中显示第一页设置为initalPage = Int.MAX_VALUE / 2。是否可以用无限寻呼机计算出真实的具体位置?

我尝试做这样的事情:

val positionFromIWantToStart = 2
 val startIndex = (Int.MAX_VALUE / 2) + positionFromIWantToStart
 val pagerState = rememberPagerState(initialPage = startIndex)

但这不正确,HorizontalPager 总是显示第一页。

请帮我。

【问题讨论】:

    标签: android android-viewpager android-jetpack-compose infinite-scroll jetpack-compose-accompanist


    【解决方案1】:

    我认为这更像是一个数学问题:)

    我认为它应该是这样的:

    val yourList = (1..5).map { it.toString() }
    val colors = listOf(Color.Red, Color.Green, Color.Blue, Color.Yellow, Color.Magenta)
    
    val positionFromIWantToStart = 3
    val itemsCount = yourList.size
    
    val numPages = Int.MAX_VALUE / itemsCount
    val startPage = numPages / 2
    val startIndex = (startPage * itemsCount) + positionFromIWantToStart
    
    val pagerState = rememberPagerState(initialPage = startIndex)
    
    HorizontalPager(
        state = pagerState,
        count = Int.MAX_VALUE
    ) { index ->
        val page = index % itemsCount
        Text(
            text = "Page ${yourList[page]}",
            modifier = Modifier
                .fillMaxSize()
                .background(colors[page]),
            textAlign = TextAlign.Center
        )
    }
    

    【讨论】:

    • 感谢您的回答,但不幸的是,在这种情况下,寻呼机始终以零索引(第一页)开头
    • 我用完整的代码更新了我的答案,它工作正常。请看一下。
    猜你喜欢
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2011-03-04
    • 1970-01-01
    相关资源
    最近更新 更多