ViewPager初用遇到问题

昨天做了个自定义的日历控件,个人感觉还可以。老大看后,一个字——改。让把按钮切换月份,换成滑动切换。一想,挺简单的嘛,有很多种方法。仔细想想,手势不行,后期日历可能要点击,估计会有冲突。想到了重写onTouchEvent方法,但是不知为何,不能接收响应事件。查了一下,事件分发机制,还是有问题。在这个自定义控件中,既没有使用onclick事件也没有重写过onTouchEvent方法,不知道焦点被谁抢了。

老大让我使用ViewPager来解决滑动,所以就有了今天的学习。

看了一大波,发现很多都是与Fragment或tab组合使用的,完全不是我要解决的滑动问题。我要解决3个问题:

1.添加视图到当前页面
2.滑动方向监听
3.控制可滑动方向

借鉴了网上一些代码,虽然知道我也是个坑,但我还是要吐槽。代码质量啊,要保证,不让就别乱贴啊。研究了半个多小时,发现代码还是有bug,让我顿时信心没了。还有的小伙伴的代码。。。。我只想说,你这样写对象少就算了,对象多了手机抗的住吗?

进入正题,对于上面的问题,最后是这样解决的。

Adapter的instantiateItem最后返回的view就是当前页。但我有个疑惑。打印log发现,没滑动一次,该方法就会被执行两次,估计是出于缓存设计的考虑吧。但问题就在这里,既然执行了2次,道理上说是创建了2个item对象。返回都页面的View只有一个,我试着判断把两次的Item分次显示,惊奇的发现,一个都显示不出来,不知何缘故。

滑动方向的监听的解决,我采取的方法是创建一个全局变量保存并比较滑动item时的position。可以在Adapter的instantiateItem和viewPager.setOnPageChangeListener中监听,但是前者较早执行。所以我这里的数据操作和处理都是在前者中处理,毕竟前者那实例化了下个页面。在后者中实现操作要要注意操作和当前页面元素的一致性,否则会出现异常。

对于滑动的控制,很简单了。默认不控制的话,开始只能左划。设置一下viewPager.setCurrentItem(monthList.size()-1);就可以让他一开始右化了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值