开发做多了,总会遇到变态的需求,有时不得不使用ScrollView和ListView嵌套,但是ScrollView和ListView存在滑动冲突,比较蛋疼,
后来发现了一个比较简单的方法,分享一下。
冲突的原因主要是ScroolView的 onInterceptTouchEvent(MotionEvent ev) 方法给拦截掉了,事件派发不到ListView中,所以造成ListView不能滚动。
解决方法:
重写ListView,上代码:
package dpfs.view;在布局文件中使用自己定义的BuildInListView取代系统的ListView就可以了。
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);
}
}
需要注意的是,onInterceptTouchEvent(MotionEvent ev)方法中getParent().requestDisallowInterceptTouchEvent(true)行代码,getParent()得到的是当前ListView的父布局,
如果不能正常滚动,可以尝试getParent().getParent().requestDisallowInterceptTouchEvent(true);
转载请注明出处。