点击事件出现冲突通常会是以下情况:
(1).出现控件之间的覆盖,相对布局里面可能出现一个位置出现多个控件,那么最里面的控件和上面控件同时监听点击事件,会出现事件不响应
(2).就是常见的scrollview和listview, listview和checkbox联合使用.
解决方案就是:我们需要对他们点击事件做处理.
scrollview和listview一起使用,点击事件冲突解决方案实例如下, listview和checkbox冲突可以看我前面的博客:
public class ListViewForScrollView extends ListView { private int startY; public ListViewForScrollView(Context context) { super(context); init(context); } public ListViewForScrollView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public ListViewForScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } private void init(Context context) { View view = new View(context); AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(Utils.dp2px(context, 100), Utils.dp2px(context, 1)); view.setLayoutParams(layoutParams); addHeaderView(view); addFooterView(view); } @Override public boolean onTouchEvent(MotionEvent ev) { requestDisallowInterceptTouchEvent(true); switch (ev.getAction()){ case MotionEvent.ACTION_DOWN: startY = (int) ev.getRawY(); break; case MotionEvent.ACTION_MOVE: int firstVisiblePosition = getFirstVisiblePosition(); int lastVisiblePosition = getLastVisiblePosition(); int moveY = (int) ev.getRawY(); int count = getCount(); if(startY-moveY>0&&lastVisiblePosition==count-1){//上划 requestDisallowInterceptTouchEvent(false); } //下划 else if(startY-moveY<0&&firstVisiblePosition==0){ requestDisallowInterceptTouchEvent(false); } startY=moveY; break; } return super.onTouchEvent(ev); } }