1. 程式人生 > >ArrayAdapter作為ListView介面卡,ListView作為LinearLayout子控制元件時,ListView的item不可點選

ArrayAdapter作為ListView介面卡,ListView作為LinearLayout子控制元件時,ListView的item不可點選

知道處於何種原因,如題所述。

解決方法: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)