ViewPager在片段恢复/重新创建时调用getScrollX返回0

4
我试图创建一个Velocity View Pager,以便可以像画廊视图一样滚动页面。我在进行滚动计算时遇到问题。我正在使用FragmentStatePagerAdapter来为ViewPager提供支持。对于普通的第一次运行而言,getScrollBy返回实际滚动位置,将第一个元素设置为0。也就是说,如果我在第3页,getScrollX返回2400(每页800px),以此类推。
当我从后台栈中恢复后,获取托管viewpager的片段时就会出现问题。这时,我的第三页变成了0,而我的第一页则成了-2400的位置。不知何故,当安卓重新填充适配器时,它会将当前位置视为0。我已经尝试了所有可能的方法,无论我能去到哪里,都使用了setCurrentItem。但不知何故,我觉得computeScroll不起作用。
如果有人能提供建议,让我如何使getScrollX返回从0开始的位置,而不是新填充的当前位置,那将非常棒。
否则,我将别无选择,只能在每次恢复时创建一个新片段。
1个回答

1

您时刻知道当前位置,对吧?我要用 ViewPager.getWidth() 将当前位置乘以您的 ViewPager 的宽度。由于 2400 是以像素为单位的,您可以使用从 getWidth() 获取的像素宽度来确定位置。

需要注意的一件事是,请确保在视图被填充并测量后再使用 getWidth() 值,否则它将返回零作为宽度。


谢谢。我想知道是否有任何方法可以使视图失效。但是像你建议的那样,我会根据滚动偏移量进行调整。谢谢。 - Himanshu Virmani
你如何获取你所指的“当前位置”? - Sebastian Oberste-Vorth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接