【android】ListView的item事件和item裡面的view的事件同時存在

來源:互聯網
上載者:User

碰到個問題:

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監聽事件

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.