今天在做demo时,须要设置ListView的item的长按和点击事件。OnItemLongClickListener和OnItemClickListener,然而点击事件能够实现,可是在长按操作时会同一时候触发点击事件(长按和点击冲突),然后查看了一下Android的相关源代码,能够看到系统是优先对应clicklisener的,他是没有返回值的的。而对于OnItemLongClickListener是有一个返回值标识。
对于一次长按操作。假设返回false,则2个lisener都会对应,假设返回true则系统仅仅处理长按事件。
因此。想要自己的OnItemLongClickListener长按事件生效,须要将返回值设为true。
以下是源代码
/*** Interface definition for a callback to be invoked when an item in this* AdapterView has been clicked.*/public interface OnItemClickListener {/*** Callback method to be invoked when an item in this AdapterView has* been clicked.* <p>* Implementers can call getItemAtPosition(position) if they need* to access the data associated with the selected item.** @param parent The AdapterView where the click happened.* @param view The view within the AdapterView that was clicked (this* will be a view provided by the adapter)* @param position The position of the view in the adapter.* @param id The row id of the item that was clicked.*/void onItemClick(AdapterView<?> parent, View view, int position, long id);}
/*** Interface definition for a callback to be invoked when an item in this* view has been clicked and held.*/public interface OnItemLongClickListener {/*** Callback method to be invoked when an item in this view has been* clicked and held.** Implementers can call getItemAtPosition(position) if they need to access* the data associated with the selected item.** @param parent The AbsListView where the click happened* @param view The view within the AbsListView that was clicked* @param position The position of the view in the list* @param id The row id of the item that was clicked* 源代码这里已经给出解释。假设返回值设为true。则系统消耗掉长按事件* @return true if the callback consumed the long click, false otherwise*/boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id);}