ViewPager+Fragment支持导航滑动以及点击切换,触发替换某个tab对应的fragment

每天积累一点点,时间久了,你就是大牛了
    最近项目中要改造首页导航栏,框架是用ViewPager+Fragment做的。导航栏中有一项fragment不固定,进入首页前如果服务器数据访问到了并且传进来了就会指明要展示的fragment。如果没有访问到数据就先展示默认的,待服务器数据访问到时再发个广播将该tab的默认fragment替换成需要的fragment。以下是我的解决办法,后面有我写的demo,有需要的可以去下载。
先晒下demo效果图:
如下图一,有tab1,tab2两个选项,分别对应两个fragment页面tab1fragment和tab2fragment,当点击1位置时tab2的fragment资源变成了由tab2fragment变成了tab3fragment页面,如下图二为点击1位置后页面切换情况。
                                    图一                                                                      图二


接下来上代码,一步步解析实现过程:

第一步:下图三为demo结构,下图四为开始进入时初始化的tab1和tab2的fragment资源,所以开始点击tab1和tab2或者滑动时显示的是这两个页面。

                            图三                                                                                         图四


第二步:当点击图一中1位置时触发下图中的方法替换tab2的由tab2fragment为tab3fragment,通过下图中3方法触发adapter中方法替换页面。

                                                      图五


第三步:在adapter中先通过flags标记需要替换的选项,然后调用notifyDatasetChanged();方法,重新加载页面,需要注意的是要重写方法  public int getItemPosition(Object object) {return PagerAdapter.POSITION_NONE;}返回值设为PagerAdapter.POSITION_NONE。在 PagerAdapter 中的实现是直接传回 POSITION_UNCHANGED。如果该函数不被重载,则会一直返回 POSITION_UNCHANGED,从而导致 ViewPager .dataSetChanged() 被调用时,认为不必触发 PagerAdapter.instantiateItem()。很多人因为没有重载该函数, 而导致调用PagerAdapter.notifyDataSetChanged() 后,什么都没有发生。

                                                                           图六



第四步:接下来就是调用图六中的2位置方法了,注释都很清楚就不详叙了
源码地址:点此进入源码界面

猜你喜欢

转载自blog.csdn.net/pys214371027/article/details/53634448
今日推荐