我有一个包含 ViewPager 的 Activity,此 ViewPager 中的第一个 Fragment 包含 ListView,当我单击任何 Item 时,它会用选定的一个替换此 Fragment,
我使用 setCurrentItem(selectedItem,true)//平滑滚动
但是 ViewPager 在选定 fragment 之前滑过所有 fragment
我希望它只滑到选定的 fragment 而不是所有 fragment
我试着像那样使用 PageTransfrom.transformPage
@Override
public void transformPage(View page, float position) {
int currentItem = viewPager.getCurrentItem();
if (currentItem != selectedItem)
page.setVisibility(View.GONE);
}
但没有运气
最佳答案
一个可能的解决方案是修改 PagerAdapter 以始终在项目 #2 上返回您想要的页面。
当点击第一页的任何项目时,首先更改 PagerAdapter 的方法 getItem(int position)
的实现,(如果您的 PagerAdapter 在同一个类文件中实现,这很容易您的代码),以在 position == 2
时返回您想要的页面,然后调用 setCurrentItem(2, true)
。这可以直接平滑滚动到所选页面。您可能还需要更改 getCount()
以将计数限制为仅 2,否则下一页可能不是预期的页面。
但此方法会关闭其他页面。用户只能滚动回第一页,然后导航到另一页。如果您想通过手动滚动(而不是通过点击)保持页面的自然顺序,您可以在 scoll(通过点击)停止后将 getItem(int position)
恢复为默认实现,并重新加载通过调用 setCurrentItem(position, false)
将当前页面停止到自然顺序(立即,这次不顺利),然后用户可以手动来回滚动。
关于android - ViewPager setCurrentItem 幻灯片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30015750/