ListView的焦點問題


本節引言

如果你在ListView的Item中加入了Button,CheckBox,EditText等控制項的話,你可能需要考慮 到一個問題:ListView的一個焦點問題!本節我們就來學習下解決這個問題的幾個方法!

我們可以寫個簡答的listView,上面有一個Button,CheckBox,EditText,但當我們點擊發現, ListView的item點不了,觸發不了onItemClick的方法,也觸發不了onItemLongClick方法, 這個就是ListView的焦點問題了!就是ListView的焦點被其他控制項搶了,下面我們來看看如何 解決這個問題?


方法1:為搶佔了控制項的元件設定:android:focusable="false"

如題,只需為搶佔了ListView Item焦點的控制設定android:focusable="false"即可解決這個問題 或是在程式碼中取得控制項後呼叫:setFocusable(false)!!另外,EditText卻不行,如果我們設定了android:focusable="false",這B可以取得焦點但是一下子 又失去了焦點,也不會彈出小鍵盤,暫不知道如何解決,聽別人說是ListView的一個bug,如果 有知道解決方法的歡迎告知下,謝謝~


方法2:item根節點設定android:descendantFocusability="blocksDescendants"

#如題,在Item佈局的根節點加入上述屬性,android:descendantFocusability="blocksDescendants"即可,另外該屬性有三個可供選擇的值:

  • beforeDescendants:viewgroup會優先其子類別控制項而取得到焦點
  • afterDescendants:viewgroup只有當其子類別控制項不需要取得焦點時才取得焦點
  • blocksDescendants:viewgroup會覆蓋子類別控制項而直接獲得焦點

#本節小結:

好的,以上就是解決ListView焦點問題的兩個方法,非常簡單,如果有關於EditText 焦點問題解決方案的歡迎提出,謝謝~