这个需要从事件分发机制说起,在按钮响应事件的时候,如果同时绑定了长按和点击事件,长按事件触发时默认不做处理的话会优先响应长按事件,如果在长按事件里面你没有消费掉该事件,根据安卓的事件分发机制,该事件会继续向下传递,直到有控件把它消费掉为止。明白了这个道理,长按事件和短按事件同时响应的问题就不难解决了,在同时绑定两个事件的情况下,如果先点击的是短按事件没问题,自然触发不到长按事件,但是如果先触发的是长按事件如果当前return false的话代表当前事件需要继续向下传递所以短按事件就被响应了,这种情况在onLongClick中返回true即可,代表当前有能力消费掉该事件,阻止事件向下传递,短按事件就不会被触发了。
//longClick事件
myViewHolder.textView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
onItemClickListener.onItemLongClick(myViewHolder.textView,position);
return true; //return true即可解决长按事件跟点击事件同时响应的问题
}
});
总结一句话就是在长按事件中的return false 改为return true就可以解决这个问题