为啥 viewPager 的 setCurrentItem() 适用于下一页而不适用于上一页?
Posted
技术标签:
【中文标题】为啥 viewPager 的 setCurrentItem() 适用于下一页而不适用于上一页?【英文标题】:why setCurrentItem() of viewPager works for next page and not for previous page?为什么 viewPager 的 setCurrentItem() 适用于下一页而不适用于上一页? 【发布时间】:2016-10-14 12:38:05 【问题描述】:我正在使用 android Studio 的选项卡式活动。
我正在滑动页面之间移动,但我添加了 2 个视图以通过 onclick 方法移动下一个和上一个视图,但仅返回到下一个是行不通的。
nextAbitudini.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
//it works
mViewPager.setCurrentItem(getArguments().getInt(ARG_SECTION_NUMBER));
);
backAbitudini.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
//it doesn't work
mViewPager.setCurrentItem(getArguments().getInt(ARG_SECTION_NUMBER)-1);
);
我正在使用 FragmentPagerAdapter。 它可以向后滑动。
我将 onClick 方法放在 onCreateview 中。
【问题讨论】:
您是否更改了 ViewPager 的 onPageSelected 上的 ARG_SECTION_NUMBER? 是的,我也尝试设置修复号 【参考方案1】:参考Tabbed Activity,看看片段初始化时的节号。 (sectionNumber = position+1)。
@Override
public Fragment getItem(int position)
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
return PlaceholderFragment.newInstance(position + 1);
因此,ARG_SECTION_NUMBER-1
指的是当前片段的位置,ARG_SECTION_NUMBER-2
指的是上一个,ARG_SECTION_NUMBER
指的是下一个。
因此,您的代码应该是这样的:
nextAbitudini.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
//it works
mViewPager.setCurrentItem(getArguments().getInt(ARG_SECTION_NUMBER));
);
backAbitudini.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
//it doesn't work
mViewPager.setCurrentItem(getArguments().getInt(ARG_SECTION_NUMBER)-2);
);
【讨论】:
您还应该注意,您应该将下一个和后退按钮放在包含ViewPager
的Activity
中,而不是每个Fragment
中。以上是关于为啥 viewPager 的 setCurrentItem() 适用于下一页而不适用于上一页?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 ViewPager 高度 match_parent 不起作用?