Fragment列表和ViewPager适配器
回到ViewPager
所在的主视图源代码文件MainActivity.java
。需要增加两个东西:
- WeatherFragment对象列表:这个代表
ViewPager
所管理和展示的页面集合。未来会按照用户具体添加的位置来产生。而目前,我们直接生成5个实例来验证ViewPager
。 - ViewPager适配器:将
WeatherFragment
对象列表关联到ViewPager
。
先定义Fragment
列表。
Fragment列表
增加列表类型的成员mFragments
并初始化为空列表:
紧接着我们为它填充测试数据。编写一个内部的私有函数fillTestInstances()
来完成,并在onCreate()
方法里面调用:
fillTestInstances()
内部较为简单,一个次数为5次的循环,每次循环都通过工厂方法建立一个实例装入Fragment列表,并将循环次数作为序号。
ViewPager适配器
适配器(Adapter)这种设计使得UI视图的控制逻辑和数据本身得以分离。至于视图中的元素如何与数据项对应,则只需要在适配器中指定即可。因此,无论是ViewPager
还是ListView
以及更高级的RecyclerView
这类重复性的视图组件通常都按照这种“视图(View)——适配器(Adapter)——数据集(Data Set)”的形式来进行组织。
Android SDK针对ViewPager
提供了几种适配器基类,例如:
- PagerAdapter
- FragmentPagerAdapter
- FragmentStatePagerAdapter
其中PagerAdapter
是适配器基类,FragmentPagerAdapter
和FragmentStatePagerAdapter
是针对以Fragment
来表示页面时可选择的实现类。在我们的项目中选择在FragmentStatePagerAdapter
的基础上定义自己的适配器类。
在类MainActivity
内部定义适配器类WeatherPagerAdapter
,并使其扩展自FragmentStatePagerAdapter
:
红线意味着语法报错。还是老办法——光标定位,按Alt+Enter查看修正菜单:
选择第一项“Implement methods”,Android Studio自动向类中增加了需要我们自己实现的方法。修正后仍然报错,继续Alt+Enter可知需要添加一个构造方法,还是自动完成。结束后代码如下:
接下来分别实现两个方法:
getItem()
这个方法意思是指出参数position
对应位置的Fragment
对象,编写代码如下:
getCount()
这个方法意思是获取全部页面的数量,返回列表mFragments
的长度即可:
下面我们来将适配器WeatherAdapter
与ViewPager绑定。先分别为ViewPager和适配器各定义一个成员变量:
再转到onCreate()
方法中,分别初始化这两个成员变量,并将适配器设置给ViewPager:
到这里,整个ViewPager的运作机制搭建完成。运行程序查看效果:
接下来我们转向WeatherFragment
内部,搭建天气信息视图。
本小节修改的文件包括:
modified: app/src/main/java/com/dmtech/iw/MainActivity.java
modified: app/src/main/java/com/dmtech/iw/WeatherFragment.java
网友评论