爱天气App实战开发

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

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

WeatherFragment

ViewPager更多的只是一个调度和管理框架,实现了必要的控制逻辑和交互效果。其内部究竟展示何种内容,则需要根据需求来构建。在我们的课程中,按照以下的方式来实现设计效果:

首先简单的创建我们的Fragment类,将其命名为WeatherFragment。Android Studio提供了向导来方便我们完成这个创建。在源代码目录下找到我们的包com.dmtech.iw如下:

选中并单击右键,选择"New" -> "Fragment" -> "Fragment (Blank)":

点击进入向导:

Fragment向导

形式与创建Activity的向导类似包含以下设置项:

这个所谓的工厂方法是做什么的?
顾名思义,所谓工厂就是生产产品的地方。一个类的工厂方法产生这个类的对象,对原始的通过new关键字来创建对象的方式进行了包装。可自学《设计模式》以深入了解。

填写后如下:

点击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内部的数据。照做即可。

    @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的序号:

前面提到了工厂方法,用来帮助创建本类的对象,具有以下特征:

在这里,我们也创建一个工厂方法,它接收一个整数类型的参数以用来设置刚才添加的成员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
上一篇下一篇

猜你喜欢

热点阅读