爱天气App实战开发

模块4:主视图UI布局 - 使用ViewPager(4)

2019-03-20  本文已影响0人  jingz课程

Fragment列表和ViewPager适配器

回到ViewPager所在的主视图源代码文件MainActivity.java。需要增加两个东西:


Fragment列表

增加列表类型的成员mFragments并初始化为空列表:

Fragment列表

紧接着我们为它填充测试数据。编写一个内部的私有函数fillTestInstances()来完成,并在onCreate()方法里面调用:

装填测试对象

fillTestInstances()内部较为简单,一个次数为5次的循环,每次循环都通过工厂方法建立一个实例装入Fragment列表,并将循环次数作为序号。


ViewPager适配器

适配器(Adapter)这种设计使得UI视图的控制逻辑和数据本身得以分离。至于视图中的元素如何与数据项对应,则只需要在适配器中指定即可。因此,无论是ViewPager还是ListView以及更高级的RecyclerView这类重复性的视图组件通常都按照这种“视图(View)——适配器(Adapter)——数据集(Data Set)”的形式来进行组织。

Android SDK针对ViewPager提供了几种适配器基类,例如:

其中PagerAdapter是适配器基类,FragmentPagerAdapterFragmentStatePagerAdapter是针对以Fragment来表示页面时可选择的实现类。在我们的项目中选择在FragmentStatePagerAdapter的基础上定义自己的适配器类。

在类MainActivity内部定义适配器类WeatherPagerAdapter,并使其扩展自FragmentStatePagerAdapter

红线意味着语法报错。还是老办法——光标定位,按Alt+Enter查看修正菜单:

选择第一项“Implement methods”,Android Studio自动向类中增加了需要我们自己实现的方法。修正后仍然报错,继续Alt+Enter可知需要添加一个构造方法,还是自动完成。结束后代码如下:

接下来分别实现两个方法:

getItem()

这个方法意思是指出参数position对应位置的Fragment对象,编写代码如下:

获取当前页的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
上一篇下一篇

猜你喜欢

热点阅读