使用ViewPager加载页面出现空白--笔记

首次启动程序时首页空白,切换页面后正常

为了便于管理,通常为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();

此时的首页界面如下:
使用ViewPager加载页面出现空白--笔记_第1张图片
明明调用initData()方法为该页面添加数据可首页依然空白

出现的原因:

两次调用initView方法(基类和instantiateItem方法)引起的,即:
1. new一个子类时,已经调用initView方法(此时是间接调用基类initView方法,由于多态的存在真正调用的是相应的子类),创建第一个视图对象
2. 给ViewPager设置adapter时,由于java的特性,adapter中的方法体还没有真正调用,因为只有在执行是才会真正调用
3. 此时调用baseContentPagerList.get(0).initData()方法时,实际上是给 第一个视图对象添加数据
4. 然而启动程序是,ViewPager首先会加载两个页面,而此时加载 首页时,第二次调用initView方法产生第二个视图对象,且显示的是该视图,第一个视图对象虽有数据却被第二个视图“覆盖”,故显示的是第二个没有数据的视图,因此出现空白,滑动后正常。

改正做法:

  1. 在基类中添加getView( )方法,并让每个子类实现。构造方法和以前一样引用initView方法,不然给首页初始化数据时会出现:为null的对象赋值的错误
  2. 在pageradapter的instantiateItem方法中调用getView方法

你可能感兴趣的:(使用ViewPager加载页面出现空白--笔记)