最后,我设法通过TouchDelegate解决了这两个问题.我在“自定义适配器”中使用的相关代码如下.我在ImageView上使用了TouchableDelegate,因此我可以肯定大多数其他对象也可以使用. TOUCH_RECT_EXPANSION只是一个常量参数,表示您希望边框扩展多少.还要注意,您的自定义适配器必须实现View.OnTouchListener.
public View getView(int position, View convertView, ViewGroup parent) {
star = (ImageView) convertView.findViewById(R.id.liststar);
final View parentview = (View) star.getParent();
parentview.post( new Runnable() {
// Post in the parent's message queue to make sure the parent
// lays out its children before we call getHitRect()
public void run() {
final Rect r = new Rect();
star.getHitRect(r);
r.top -= TOUCH_RECT_EXPANSION;
r.bottom += TOUCH_RECT_EXPANSION;
r.left -= TOUCH_RECT_EXPANSION;
r.right += TOUCH_RECT_EXPANSION;
parentview.setTouchDelegate( new TouchDelegate(r,star) {
public boolean onTouchEvent(MotionEvent event) {
return true;
}
});
}
});
star.setOnTouchListener(this);
}
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
// do something here
}
return true;
}
}
我的onItemClickListener也有一些问题.最后,通过使用实现接口OnItemClickListener的单独的自定义类解决了这些问题,因此,如果您遇到问题,请尝试使用该类,但很有可能我对类内的onItemClickListener做错了,因为我无法看看有什么理由应该有所不同.