ArrayAdapter作為ListView介面卡,ListView作為LinearLayout子控制元件時,ListView的item不可點選
阿新 • • 發佈:2019-02-19
知道處於何種原因,如題所述。
解決方法:1. 將RelativeLayout作為ListView的父控制元件。2.用baseAdapter作為ListView的介面卡。
其中使用了各種使ListView的Item獲得焦點的方法都無濟於事,包括如下:
1.listView.setItemsCanFocus(true); //設定item項的子控制元件能夠獲得焦點(預設為false,即預設item項的子空間是不能獲得焦點的)
2.android:descendantFocusability=”blocksDescendants”
android:descendantFocusability
Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus.
Must be one of the following constant values.
該屬性是當一個為view獲取焦點時,定義viewGroup和其子控制元件兩者之間的關係。
屬性的值有三種:
beforeDescendants:viewgroup會優先其子類控制元件而獲取到焦點
afterDescendants:viewgroup只有當其子類控制元件不需要獲取焦點時才獲取焦點
blocksDescendants:viewgroup會覆蓋子類控制元件而直接獲得焦點
這其實是解決Item作為一個ViewGroup時,時Item中的子控制元件獲取到焦點的做法,而不是使ListView中的Item獲得焦點的方法。3.**解決方法:** 1. 在xml中設定Button的android:focusable="false", 這樣Button就不會去搶奪焦點了.//防止item中的ViewGroup(Item中包含了一個ViewGroup)中的子控制元件搶焦點 2. 在getView()中設定Button不去獲取焦點, btn.setFocusable(false).//與上面解決一樣 3. 設定item的根佈局的配置android:descendantFocusability="blocksDescendant"//優先Item搶焦點(其實Item應該算是一個比使用者設定的的ViewGroup更外層的VIewGroup)