在之前的博文《》和《》以及《》中我们介绍了ViewPager以及Fragment各自的使用场景以及不同的实现方式
那如果将他们两结合起来,会不会擦出点火花呢答案是肯定的。之前在介绍ViewPager時我们实现了多个ImageView的切换,并配合更新导航原点的状态那我们现在就将之前的imageview替换为fragment,将导航原点替换为更加生动的布局比如我们經常使用的微信(取消了ActionBar):
(1)我们可以通过点击下面的导航按钮选择对应的显示界面(fragment),如下图:
(2)我们也可以通过滑动界面(fragment)来实现界面切换同时下面的导航按钮状态也会发生变化,如下图:
那么重点来了这样的效果要怎么实现呢,大至分为以下的步骤
(1)布局文件中直接部署ViewPager以及下方的导航布局
(2)根据导航的个数来建立对应的fragment布局并建立配套的Fragment类(为方便后期扩展建议建立与导航个數相同的fragments)
(3)drable下使用selector实现导航组件的形态变化
第三步:drable中设定下方导航组件不同的形态导航组件中文字形态变化只是颜色不同,图片的話需要设置点击前后不同的图片(这里演示一种)
4个fragment对应4个java类这里演示一个,其他三个都一样
代码中详细标注了各个实现步骤的注释,这里不再赘述(为了提高程序运行效率很多重复方法未封装,代码看起来有点臃肿了)
后期就微信的其他功能的实现做简单介绍,不早了休息
问题查阅了官方文档,也实现叻官方的例子但实际项目是ViewPager+Fragment,按官方的例
子总是获取配置文件中不到Fragment的引用,如:
查询相关资料后终于找到如下解决方案:
一般来讲,我们再使用viewpager的时候是在代码中动态的添加fragment。此时我们不能去指定
fragment的id,也不能指定他的tag,如果你一定要去指定tag,运行时會提示,tag已经被指定那么,在动
态的添加了fragment之后我们如何能获取配置文件中到该fragment并修改其中的内容呢。两种方法:
第一种方法实际上是一种hack方法并没有官方文档说明支持。代码如下: