Android中ListView点击onItemClick不响应,onTouch和onItemLongClick响应

这里先说以下原因,我这里的ListView不能点击,可能是跟线程更新UI有关,与获取焦点之类无关。

程序里的ListView设置了点击监听setOnItemClickListener,长按监听setOnItemLongClickListener,触摸监听setOnTouchListener。

onTouch返回值作用
返回值 作用
true 不能向onItemLongClick,onItemClick传递(不能响应点击、长按)
false 可以继续向onItemLongClick,onItemClick传递(能响应点击、长按)

onItemLongClick返回值作用
返回值 作用
true 不能向onItemClick传递(不能响应点击)
false 可以继续向onItemClick传递(能响应点击)

这里onTouch返回值设置为false,onItemLongClick返回值设置为true。

也就是触摸-->长按,触摸-->点击两种模式。

之前onTouch没加入处理函数时,一切正常,可触摸、点击、长按,效果如上列出来的两种模式。

问题:后onTouch中加入当抬起(MotionEvent.ACTION_UP)时,调用adapter中的方法notifyDataSetChanged()对列表更新操作,列表就点击无响应,触摸和长按都有响应。

解决:onTouch中抬起(MotionEvent.ACTION_UP)时,发送handler消息,在handler中进行进行列表更新(方法与上一样),列表就可以点击了,触摸和长按都没问题。

分析:调用方法都在onTouch中,区别就是一个是直接调用adapter中的notifyDataSetChanged()进行列表更新,一个是发送handler消息,再调用adapter中的notifyDataSetChanged()进行列表更新。原因可能是在onTouch调用此方法不在主线程,不能进行UI更新。(自己猜测,如有想法请指教!)

猜你喜欢

转载自blog.csdn.net/geniushorse/article/details/79932770