最近在做項目時,遇到一個要求, 長按gridView的Item,和點擊Item事件。
點擊長按onItemLongClickListener時,可刪除GridView的Item
點擊某個Item時執行OnItemClickListener事件。
2個同時存在時,會發現,點擊長按事件後,它會執行點擊某個Item事件。
gridView.setOnItemClickListener(itemListener);
gridView.setOnItemLongClickListener(itemLongListener);
解決的辦法是: 讓它返回true, [如果默認返回是false,是會執行OnItemClickListener事件的。]
private OnItemLongClickListener itemLongListener = new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
showDeleteDialog(position);
return true;
}
};
總結:
對於onLongClickLisener是有一個返回值標識。對於一次長按操作,如果返回false,則2個lisener都會相應,如果返回true則時間被longClick鏈式攔截,後面的【clickLisener處於後面的位置】的註冊的lisener將不再向上回調;在處理長按時,注意的細節是把onItemLongClick返回設置爲true,否則長按是會執行setOnItemClickListener事件的
這樣就解決了點擊時的衝突問題了,記錄下來方便自己和他人看吧。