ListView的长按事件和点击事件冲突的解决办法

    需求是这样的: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的动作。(这是我自己个人的猜测,做不得准,如果有不同观点的,可以评论或者私信告知在下哈,非常感谢!)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值