在安卓开发中,相信很多安卓开发的朋友都会用到ListView控件,但是在使用ListView控件的时候,会遇到这样的一些问题:当Listview的某一行有button存在时,无法弹出contextMenu;onItemClick和onItemLongClick同时执行(也就是onItemClick和onItemLongClick事件同时触发)的等问题,下面看一些关于ListView的常见问题。
(1)ListView.setOnItemClickListener设置的listener一般在当点击某行内容是会被调用,但是如果这行内容中包含Button,ImgButton等控件时就不会被调用
(2)ListView.setOnItemLongClickListener设置的listener一般在当长按某一行时会被调用,而且在抬起之前就已经调用了。
(3)onItemLongClick的调用后是否还会调用onItemClick,这个要根据onItemLongClick的返回值来决定,下面做已详细解释:
lv.setOnItemClickListener(new OnItemLongClickListener() {
public boolean onItemClick(AdapterView<?> parent, View view, int position, long id) {
System.out.println("ITEM LONG CLICKED >> POSITION : " + position);
return false;
}
});
lv.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
System.out.println("ITEM LONG CLICKED >> POSITION : " + position);
return false/true;
}
});
说明:看上面两段代码,如果onItemLongClick返回false那么onItemClick仍然会被调用。而且是先调用onItemLongClick,然后调用onItemClick,如果返回true那么onItemClick就不会再被调用了。
(4)onItemClick以及onItemLongClick对弹出菜单的影响:onItemClick不影响弹出菜单;onItemLongClick如果返回true那么菜单不能弹出,只有在onItemLongClick如果返回false的时候才会弹出菜单。
(5)让包含button的item也能弹出菜单,回调onItemClick以及onItemLongClick的监听器,需要设置Button属性:
Android:focusable="false"
android:focusable="false"
android:longClickable="true"
android:longClickable="true"