我目前正在与FragmentStatePager
一起工作,并且对相关功能中发生的事情不太了解。具体来说,我对getItem()
方法感到困惑。
我有一个内心的class
:
public static class MyAdapter extends FragmentStatePagerAdapter {
SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
...
}
.....
......
}
在此类之外,我有这样的功能:
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction
fragmentTransaction){
mViewPager.setCurrentItem(tab.getPosition());
}
现在我遇到了问题,没有任何线索。调试时,我在应用程序中单击此适配器的第1部分(位置1),然后在tab.getPosition() == 1
函数中得到了onTabSelected()
。但是随后它跳转到getItem(int position)
函数,在这里我得到了position == 2
。奇怪的是,在这两个函数之间,我没有其他代码可以将position
从1
更改为2
。你们有任何线索吗?因此,请分享并帮助我。
编辑:首先加载适配器时,它首先在3中设置2个部分(位置0和1)。然后,当我单击第2部分(位置1)时,它将加载部分2(位置3)。如果发生这种情况,如何克服呢?
当我单击第2部分时,我需要加载第2部分。如何执行此操作?
愿全能者祝福所有人。
答案 0 :(得分:0)
这是viewpager的默认行为,默认情况下加载当前页面的前一页和后一页。
您可以从ViewPager使用OffScreenPageLimit。
从here检查官方文档
默认值为1,表示将在当前页面的两面装入1页。
您可以使用ViewPager的 setOffscreenPageLimit 方法进行更改。
答案 1 :(得分:0)
如Man
所述,这是viewpager的默认行为。
当我单击第2部分时,我需要加载第2部分。如何执行此操作?
您可以使用setUserVisibleHint
。在用户可见时加载您的片段数据(API调用等)
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser){
//do your api call etc
}
}