
Android中 Fragment + ViewPager 做出更具现代感的交互
Fragment + ViewPager 初试探
下面是一些关于 Fragment 和 ViewPager 的总结。至于 Fragment 和 ViewPager 是什么就不说了,通常情况下两者是结合一起使用的,可以实现类似QQ或者微信的左右滑动,请看下面的 GIF。
好吧,现在来开始讲一下是如何使用它们的。
Fragment
我们自定义一个 RecommendFragment 类,该类继承 Fragment,代码如下:
onCreateView 是用来加载 Fragment 视图的,再来看 RecommendFragment 对应的 XML 文件:
关于 Fragment ,可以使用简单工厂模式来进行创建,代码如下:
ViewPager
ViewPager 的作用如下:
ViewPager主要用来左右滑动。(类似图片轮播)
ViewPager要用适配器来连接“视图”和“数据”。(大家可以联想下listview的使用方法,原理是类似的)
官方推荐ViewPager与Fragment一起使用,并且有专门的适配器。
ViewPager 需要使用适配器,适配器的话这边就用 Fragment + ViewPager 的适配器来举例,接下来讲 Fragment + ViewPager 的组合使用。
Fragment + ViewPager
首先, 使用 单 Activity 加多 Fragment ,这个 Activity 必须继承 FragmentActivity 类,重点看一下适配器,适配器必须继承 FragmentPagerAdapter:
Activity 对应的 XML 文件里,存在这样的 ViewPager 控件:
在继承了 FragmentActivity 类的 Activity 里面,是这样使用适配器的:
以上就是 Fragment + ViewPager 的使用了,通过上面的操作,我们可以实现多个 Fragment 左右滑动。实际上我们的需求并不止如此,正如同 GIF 图所示,我们需要实现一下两个功能:
点击上面的标题,下面的 ViewPager 的中的 Fragment 会发生改变。
左右滑动界面,上面的 Table 栏的标题会跟着滑动。
对于第一个功能,我们找到 title 控件,设置点击事件就可以了,只需要下面一行代码:
对于第二个功能,我们需要实现 onPageScrollStateChanged 这个接口才行,它的源码如下:
下面简单说一下。
- onPageScrollStateChanged(int state): 有三种状态,SCROLL_STATE_IDLE、SCROLL_STATE_DRAGGING、SCROLL_STATE_SETTLING,分别表示滑动还没开始、正在滑动、滑动完成。
- void onPageScrolled(int position, float positionOffset, @Px int positionOffsetPixels): 在滑动的过程中不停触发这个方法。
- void onPageSelected(int position): 表示滑动已经完成,position 指的是当前位置。
我们只需要重写上面三个方法,就可以实现上诉第二个功能。
