本文共 1217 字,大约阅读时间需要 4 分钟。
原文链接:
首次启动程序时首页空白,切换页面后正常
为了便于管理,通常为ViewPager的每个子页面建立一个基类,然后用一个集合(一般用ArrayList)承载该ViewPager的所有子页面,然而在该基类的构造方法中一般引用initView()方法,使得某个子类在new的时候就创建视图,而在pageradapter中的
public Object instantiateItem(ViewGroup container, int position) { }
方法中一般也会调用基类的initView()方法添加将要展示界面,错误出现:
即使在其他地方改变ViewPager中子页面的显示也无法将其展示出来,即出现空白现象
事例代码(智慧北京项目):viewPager.setAdapter(new MyPagerAdapter(baseContentPagerList)); /* *初始化首页数据 *baseContentPagerList为承载每个子页面的ArrayList */ baseContentPagerList.get(0).initData();
此时的首页界面如下:
明明调用initData()方法为该页面添加数据可首页依然空白
出现的原因:
两次调用initView方法(基类和instantiateItem方法)引起的,即:
在基类中添加getView( )方法,并让每个子类实现。构造方法和以前一样引用initView方法,不然给首页初始化数据时会出现:为null的对象赋值的错误
在pageradapter的instantiateItem方法中调用getView方法setCurrentItem 表示切换当前的ViewPager到指定界面,因为ViewPager有缓存和回收机制,也就是说,默认情况下ViewPager只会创建三个界面,因此跳过三个界面的时候,需要重新创建,所以导致空白,解决方案就是:
viewPager.setOffscreenPageLimit(4); 表示四个界面来回切换不会重新创建,就会不出现空白了。