FragmentPagerAdapter Fragment getItem位置错误?

时间:2018-09-19 21:55:34

标签: java android android-fragments fragmentpageradapter

所以由于某些原因,当我切换选项卡活动上的选项卡时,我得到的位置错误。

在我文章的底部,当我启动我的应用程序时,您可以看到我的logcat,选项卡1和选项卡2分别称为它们的oncreateview。

即使我在选项卡1上(位置必须为0),位置0也会切换为1。

所以我的问题是,当我更改选项卡时,显示了错误的数据和错误的logcat信息。

例如,我更改为选项卡2,logcat会显示我从tab3调用的oncreateview吗?

我该如何解决?

谢谢

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    private int numOfTabs;

    SectionsPagerAdapter(FragmentManager fm, int numOfTabs) {
        super(fm);
        this.numOfTabs = numOfTabs;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:
                Log.e(TAG, "Pos: "+ position);
                return new Tab1();
            case 1:
                Log.e(TAG, "Pos: "+ position);
                return new Tab2();
            case 2:
                Log.e(TAG, "Pos: "+ position);
                return new Tab3();
            case 3:
                Log.e(TAG, "Pos: "+ position);
                return new Tab4();
            case 4:
                Log.e(TAG, "Pos: "+ position);
                return new Tab5();
                default:
                    return null;
        }
    }

    @Override
    public int getCount() {
        // Get total pages
        return numOfTabs;
    }
}

Logcat

 .activities.MainActivity: Pos: 0
 .activities.MainActivity: Pos: 1
 .fragments.Tab1: onCreateView called!
 .fragments.Tab2: onCreateView called!

1 个答案:

答案 0 :(得分:1)

ViewPager默认情况下会加载2个标签。因此,第一次打开应用程序时,getItem会被调用两次。当您转到tab2时,ViewPager会预先加载tab3,以便滚动平滑。参见offscreenPageLimit