ScrollView和ListView滚动手势冲突解决方法

开发做多了,总会遇到变态的需求,有时不得不使用ScrollView和ListView嵌套,但是ScrollView和ListView存在滑动冲突,比较蛋疼,
后来发现了一个比较简单的方法,分享一下。
冲突的原因主要是ScroolView的 onInterceptTouchEvent(MotionEvent ev) 方法给拦截掉了,事件派发不到ListView中,所以造成ListView不能滚动。

解决方法:
重写ListView,上代码:
package dpfs.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ListView;

/**
* Created by xingzy on 2015/11/27.
*/
public class BuildInListView extends ListView {
public BuildInListView(Context context) {
super(context);
}

public BuildInListView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public BuildInListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {

switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
getParent().requestDisallowInterceptTouchEvent(true);
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
getParent().requestDisallowInterceptTouchEvent(false);
break;

}
return super.onInterceptTouchEvent(ev);
}
}
在布局文件中使用自己定义的BuildInListView取代系统的ListView就可以了。
需要注意的是,onInterceptTouchEvent(MotionEvent ev)方法中getParent().requestDisallowInterceptTouchEvent(true)行代码,getParent()得到的是当前ListView的父布局,
如果不能正常滚动,可以尝试getParent().getParent().requestDisallowInterceptTouchEvent(true);

转载请注明出处。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值