碰到個問題:
ListView的onItemClickListener監聽事件,若item裡面有button也監聽事件,則不能同時監聽事件,會有個沒反應。
解決方案:
解決方案的本質就是不用onItemClickListener的事件,轉移到item裡面某個View的事件
方案1、擷取item最外層的view
這時候如果你給listView設定listView.setOnItemLongClickListener();事件後,發現只有長按editText才能觸發item的事件,所有擷取焦點失去焦點轉移焦點的方法都試過了。都沒有方法解決:最簡單的解決方案是:在getView方法中擷取item的最外層布局:viewHolder.ll_item = (LinearLayout) convertView.findViewById(R.id.ll_item);然後在getView方法內給這個布局設定事件: viewHolder.ll_item.setOnLongClickListener(new OnLongClickListener() {@Override public boolean onLongClick(View v) {}); 這樣既可以點擊editText輸入文本,也可以點擊item來觸發自己需要的事件!
方案2、item底層加一層View覆蓋
副作用:View上再有其他的View會監聽不到事件。(未測試)
會有副作用
方案3、這篇文章好像可以解決同時監聽的問題
http://txlong-onz.iteye.com/blog/907186
另外,通過這種方法不可以將ListView和ImageView同時添加了監聽,通過網上搜尋,原來是沒有在xml中添加部分屬性,在list的配置xml的根節點添加屬性android:descendantFocusability="blocksDescendants",還有就是在要添加事件的控制項上添加android:focusable="false",上邊的代碼中我已經添加過了。
這些就跟View和ListView的焦點問題相關了:
http://blog.sina.com.cn/s/blog_a855dc2c01014ith.html
方案4、(經測試)完全解決
意思跟上面的差不多,也是在最下面用一個View監聽事件。item裡面使用FrameLayout,完全解決。
上層的View若寫了監聽器,監聽到事件時就把事件交個它處理了,不會繼續往下傳遞;
若上層的View沒有監聽器,則事件會往下傳遞,直到有View監聽到並處理這個事件,或到最底層結束。
這就不會出現上層的View影響下層的View監聽事件