WeatherFragment
ViewPager
更多的只是一个调度和管理框架,实现了必要的控制逻辑和交互效果。其内部究竟展示何种内容,则需要根据需求来构建。在我们的课程中,按照以下的方式来实现设计效果:
- 通过一个
Fragment
来定义和描述每一个展示在ViewPager
中的页面 - 创建一组
Fragment
对象来对应用户关心的若干地域的天气信息 - 将这一组
Fragment
对象与ViewPager
相关联以实现交互处理
首先简单的创建我们的Fragment
类,将其命名为WeatherFragment
。Android Studio提供了向导来方便我们完成这个创建。在源代码目录下找到我们的包com.dmtech.iw
如下:
选中并单击右键,选择"New" -> "Fragment" -> "Fragment (Blank)":
点击进入向导:
Fragment向导形式与创建Activity的向导类似包含以下设置项:
-
Fragment Name:指定类名,我们填写
WeatherFragment
。 - Create layout XML?:是否需要创建布局文件——当然需要,保持勾选。
- Fragment Layout Name:对应的布局文件,保持自动设置不变。
-
Include fragment factory method:是否在
WeatherFragment
类中生成的工厂方法。此项虽然有用但是对于目前学习阶段的我们容易造成干扰,去掉勾选。
这个所谓的工厂方法是做什么的?
顾名思义,所谓工厂就是生产产品的地方。一个类的工厂方法产生这个类的对象,对原始的通过new
关键字来创建对象的方式进行了包装。可自学《设计模式》以深入了解。
- include interface callbacks:去掉勾选,理由同上。
填写后如下:
点击Finish
完成创建。检查一下相关的文件是否创建齐全:
res/layout/fragment_weather.xml
fragment_weather.xml这个自动生成的布局中简单的放置了一个TextView
。我们目前先简单的利用这个TextView
来做效果验证。后面真正展示天气信息时再修改它。为其添加id为tv_name
以便在代码上引用:
将文字改大并居中对齐,同时改成蓝色背景色,以便在后面的测试中清晰可见:
稍后我们在代码中设置这个文本视图的内容,让它能够显示自己的序号,这样就可以尽快体验ViewPager
的切换效果。
WeatherFragment.java
WeatherFragment.java该文件中定义了WeatherFragment
类。解释一下其中内容:
- 一个空的构造方法:
public WeatherFragment() {
// Required empty public constructor
}
如注释所说,不要修改的这个方法。Android开发规范要求我们不要通过构造方法来设置Fragment
内部的数据。照做即可。
- onCreateView()方法
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_weather, container, false);
}
这是Fragment
的生命周期方法。顾名思义,在创建Fragment
用户界面视图时调用。其中唯一一行代码的意思是导入布局文件fragment_weather.xml
中描述的界面布局。
对源代码做一些修改以配合现阶段的演示。
首先增加一个整数成员变量position
以表示Fragment
的序号:
前面提到了工厂方法,用来帮助创建本类的对象,具有以下特征:
- 为静态(
static
)方法,通过类名进行调用 - 在工厂方法中可以直接将参数赋给类内部的成员
- 返回值即为创建好的本类对象
在这里,我们也创建一个工厂方法,它接收一个整数类型的参数以用来设置刚才添加的成员mPosition
:
再接下来,根据序号来设置TextView
显示的内容。首先改写onCreateView()
方法:
这次修改含义不变,只是增加了变量view
来引用当前Fragment
的布局对象,以便从中获取文本视图对象。继续添加代码,从view
对象内部获取文本视图对象,然后再根据mPosition
成员所表示的序号来设置文本内容:
WeatherFragment
的定义到此告一段路,具体的天气信息的布局我们后面再来实现。目前阶段的任务是从全局出发实现ViewPager
的正常运作。下面我们将注意力转到ViewPager
上来。
本小节改动的文件:
modified: app/build.gradle
modified: app/src/main/java/com/dmtech/iw/WeatherFragment.java
modified: app/src/main/res/layout/fragment_weather.xml
modified: app/src/main/res/values/strings.xml
网友评论