在getItem()中获得的价值与预期的有所不同

时间:2018-07-21 10:05:47

标签: java android fragment android-adapter

我目前正在与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。奇怪的是,在这两个函数之间,我没有其他代码可以将position1更改为2。你们有任何线索吗?因此,请分享并帮助我。

编辑:首先加载适配器时,它首先在3中设置2个部分(位置0和1)。然后,当我单击第2部分(位置1)时,它将加载部分2(位置3)。如果发生这种情况,如何克服呢?

当我单击第2部分时,我需要加载第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
    }
}