ViewPager结合PagerAdapter实现在Fragment下的随手指滑动翻页

前几天由于项目需要,必须在Fragment下实现月历的翻页功能,虽然可以使用ViewSwitcher来做,但是从用户体验来看,ViewSwitcher切换动画的效果真的是不敢恭维,并且不能实现随手指滑动的效果,所以就从ViewPager着手做了。

我是自定义的月历每一页,单独继承于一个LinearLayout重写的CalendarView,并用自定义的View来实现重新绘制每一天的视图,刚开始想的是先用一层Fragment来封装月视图也就是CalendarView,然后在自己要写的Fragment中使用FragmentAdapter来实现从每一月的BaseFragment切换,玩儿了几天,终于放弃了。下面会详细叙述原因:

FragmentAdapter需要获取的要修改的FragmentManager,但是在项目给定的Fragment中我们获取到的是android.app.FragmentManager(由于主界面定义的Fragment必须是android.app.FragmentManager,所以获取到的自然也就是了),但FragmentAdapter需要的却是V4版本的FragmentManager,所以就遇到了问题,PM那边直说了项目由于版本需求,必须最多兼容V4版本的,这样,虽然查到了V13版本的FragmentManager兼容APP和V4版本的,却不能用了。这时候一学长就给出了建议,为什么不用ViewPager的PagerAdapter来实现View之间的切换呢?

使用ViewPager的PagerAdapter来实现View之间的切换之前并不是没有想过,但是在实现的时候由于已经把CalendarView封装成一个BaseFragment了,而获取该BaseFragment的View的时候老是空指针,就放弃了,这也说明了先生学艺不精,不明白Fragment中定义的View是什么概念,直接调用了BaseFragment的getView,所以老是Down掉了,其实getView是系统调用的,当用户自己使用时,就相当于重新创建了一个BaseFragment,这时,获取到的View当然是空了。

最后,还是听从了学长的建议,乖乖的使用PagerAdapter来实现随手指滑动翻页的功能,但是问题接着接踵而至:

由于我的CalendarView是重写了LinearLayout,并且在这个LinearLayout中我定义了两个View,全都是通过addView来添加到LinearLayout中的,所以在ViewPager获取具体View的时候,总是默认获取到的是LinearLayout中的第一个View,没办法,只好把标头的View在给定的Fragment实现,并把月视图添加到了ViewPager中,这样就实现了基本的滑动。

滑动是实现了,但是ViewPager默认的是在有限页面的滑动,并且默认起始页面是第一页,这个不是什么大问题,我们只需要设定一个OnPageChangeListener就可以监听到页面变化,这样就可以动态的生成页面,解决了有限页面的问题;setCurrentItem就可以设置ViewPager的初始化界面是那一个,这样就解决了默认起始页面的问题,但是,不可忽视的是月历是可以向两个方向无限滑动的,我解决这个问题的方法是把起始页面设置成一个非常大的int型数,只要用户不是白痴,就不会为了测试我的月历而向前翻这么多页。

这样一个基本的月历就实现了,在做这个的时候中间还有看起来无数的BUG,但最后都不是问题,随着一个一个BUG的修补,我的月历也越来越完善了,直到最后心安的翻起来这个最终可以用的版本,算是完成了这阶段的任务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值