1. 程式人生 > >Android中ListView點選onItemClick不響應,onTouch和onItemLongClick響應

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更新。(自己猜測,如有想法請指教!)