1. 程式人生 > >ListView的長按事件和點選事件衝突的解決辦法

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的動作。(這是我自己個人的猜測,做不得準,如果有不同觀點的,可以評論或者私信告知在下哈,非常感謝!)