ListView的item实现滑动、点击、长按不冲突


要实现这样的一个功能:

一个ListView,能向左滑动出现删除按钮,点击item进入详情,长按item进入编辑

也就是说要做到滑动、点击、长按三个动作互不干扰,滑动时间长了不能触发长按,滑动后手松开不能触发点击。


刚开始我用的方法是:

item的view复写onTouchEvent   +  item setOnItemClickListener   +   item setOnItemLongClickListener,

结果滑动、点击、长按三个动作出现了冲突,滑动过程时间长了一定会触发长按事件,滑动结束后一定会触发点击事件。


网上的方法大多数是计算滑动过程的距离、时间,比如距离超过一定数值onTouchEvent 就return true,屏蔽掉点击和长按事件。

这种方法实际不可行,长按是在ACTION_MOVE中触发的,点击是在ACTION_UP后触发的,想同时完美无缺的屏蔽太难了。


完美的解决方案是:

在adapter的getView里,为item的view  setOnTouchListener,在onTouch中把event作为参数传给item view的方法处理,同时也传给gestureDetector:

item.slideView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                mFlingListener.setItem(item);
                item.slideView.deliverTouchEvent(event);
                return mGestureDetector.onTouchEvent(event);
            }
        });


gestureListener中的onSingleTapUp(点击)和onLongPress(长按)就不会跟滑动事件冲突了,

滑动事件的实现在view的方法(deliverTouchEvent)中实现就行了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值