Android中自訂ListView無法響應OnItemClickListener中的onItemClick方法問題解決方案

來源:互聯網
上載者:User

在Android軟體設計與實現中我們通常都會使用到ListView這個控制項,系統有一些預置的Adapter可以使用,例如SimpleAdapter和ArrayAdapter,但是總是會有一些情況我們需要通過自訂ListView來實現一些效果,那麼在這個時候,我們通常會碰到自訂ListView無法選中整個ListViewItem的情況,也就是無法響應ListView的onItemClickListener中的onItemClick()方法,究竟是為什麼呢?我之前也在網上查過不少的資料,但是沒有發現什麼有價值的文章,有一些是建議在Adapter的getView方法中對自己需要響應單擊事件的控制項進行設定。但是最終的效果並不是特別理想,而且我認為這是一種取巧的方式,並不推薦

 

 

我們看到了一行代碼定義的變數的意思是“當前View將屏蔽他所有子控制項的Focus狀態,即便這些子控制項是可以Focus的”,其實這段話的意思就是這個變數代表著當前的View將不顧其子控制項是否可以Focus自身接管了所有的Focus,通常預設能獲得focus的控制項有Button,Checkable繼承來的所有控制項,這就意味著如果你的自訂ListViewItem中有Button或者Checkable的子類控制項的話,那麼預設focus是交給了子控制項,而ListView的Item能被選中的基礎是它能擷取Focus,也就是說我們可以通過將ListView中Item中包含的所有控制項的focusable屬性設定為false,這樣的話ListView的Item自動獲得了Focus的許可權,也就可以被選中了,也就會響應onItemClickListener中的onItemClick()方法,然而將ListView的Item Layout的子控制項focusable屬性設定為false有點繁瑣,我們可以通過對Item Layout的根控制項設定其android:descendantFocusability=”blocksDescendant”即可,這樣Item Layout就屏蔽了所有子控制項擷取Focus的許可權,不需要針對Item Layout中的每一個控制項重新設定focusable屬性了,如此就可以順利的響應onItemClickListener中的onItenClick()方法了。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.