需求是这样的:listView中点击item 跳转到一个activity,长按item可以对这条item进行删除操作,在删除前会弹出dialog(确认删除对话框)。
但是在开发过程中发现,当长按某个item时,先弹出dialog,然后就跳转到目标activity。也就是说,长按事件和点击事件同时发生了!我是第一次接触长按事件,所以一头雾水,确实也不知道问题出在哪里。在网上查找后得知,长按事件中的匿名内部类中的长按方法会返回一个布尔值,应该返回true。
lv_process.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(this,"人生到处何所似,应似飞鸿踏雪泥。",Toast.LENGTH_SHORT).show();
return true;
}
});
而我之前返回的是false,修改成true后,确实把问题解决了。
然后还是有点不太懂,于是查了下源码,发现OnItemLongClickListener这个借口中只有一个方法并且返回值是boolean类型:
/* @return true if the callback consumed the long click, false otherwise */
boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id);
请大家注意上面这一行红色英文解释,意思是说,如果这个长按事件被消耗掉了,那么就返回true,如果没有被消耗掉,那么返回false.
那么反过来我觉得也成立,如果长按后进行了一些操作,但是返回false,那么程序会认为这个长按事件没有被消耗掉,因此会传递到点击事件那儿,然后完成跳转activity的动作。(这是我自己个人的猜测,做不得准,如果有不同观点的,可以评论或者私信告知在下哈,非常感谢!)