今天在做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); }
版权声明:本文为博主原创文章,未经博主允许不得转载。
Android长按事件和点击事件问题处理,OnItemLongClickListener和OnItemClickListener
原文地址:http://blog.csdn.net/u012527802/article/details/47338263