代码之家  ›  专栏  ›  技术社区  ›  Vince VD

碎片页面雷达碎片获取项目位置错误?

  •  0
  • Vince VD  · 技术社区  · 7 年前

    在我文章的底部,当我启动我的应用程序时,你可以看到我的logcat,tab 1和tab 2,它们的oncreateview被调用。

    位置0切换到1,即使我在选项卡1上,它必须是位置0。

    所以我的问题是,当我改变一个标签时,错误的数据显示和错误的logcat信息。

    我该怎么解决?

    谢谢,

    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 回复  |  直到 7 年前
        1
  •  1
  •   nupadhyaya    7 年前

    默认情况下,ViewPager加载2个选项卡。所以当你第一次打开应用程序时,getItem会被调用两次。当您转到tab2时,ViewPager会提前加载tab3,以便滚动平滑。见 offscreenPageLimit .