如果listitem裏面包括button或者checkbox等控件,默認情況下listitem會失去焦點,導致無法響應item的事件,最常用的解決辦法
是在listitem的佈局文件中設置descendantFocusability屬性。
item的佈局文件:
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingTop="10dp"
- android:paddingBottom="10dp"
- android:paddingLeft="5dp"
- android:paddingRight="5dp"
- android:descendantFocusability="blocksDescendants"><!--添加這個屬性-->
- <CheckBox
- android:id="@+id/history_item_checkbt"
- android:layout_height="30dp"
- android:layout_width="wrap_content"
- android:layout_centerVertical="true"
- android:layout_alignParentLeft="true"
- android:checked="false"
- >
- </CheckBox>
- <ImageView
- android:id="@+id/history_item_image"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:layout_toRightOf="@id/history_item_checkbt"
- android:background="@drawable/item_icon">
- </ImageView>
- <Button
- android:id="@+id/history_item_edit_bt"
- android:layout_alignParentRight="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:text="編輯"
- android:textColor="#ffffff"
- android:textSize="14sp"
- android:background="@drawable/button_bg">
- </Button>
- <TextView
- android:id="@+id/history_item_time_tv"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:textColor="#565C5D"
- android:textSize="14sp"
- android:text="10-01 10:20"
- android:layout_marginRight="5dp"
- android:layout_toLeftOf="@id/history_item_edit_bt">
- </TextView>
- <TextView
- android:id="@+id/history_item_title_tv"
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:layout_centerVertical="true"
- android:textColor="#565C5D"
- android:textSize="14sp"
- android:text="xxxxxxxxXXXXXXXXXXXXXXXX"
- android:ellipsize="end"
- android:maxLines="1"
- android:layout_toRightOf="@id/history_item_image"
- android:layout_toLeftOf="@id/history_item_time_tv"
- android:layout_marginLeft="3dp">
- </TextView>
- </RelativeLayout>
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會覆蓋子類控件而直接獲得焦點
我們使用的是第三個。