欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 中ListView点击Item无响应问题的解决办法

程序员文章站 2024-02-24 14:06:04
如果listitem里面包括button或者checkbox等控件,默认情况下listitem会失去焦点,导致无法响应item的事件,最常用的解决办法是在listitem的...

如果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.

Android 中ListView点击Item无响应问题的解决办法

该属性是当一个为view获取焦点时,定义viewgroup和其子控件两者之间的关系。

属性的值有三种:

        beforedescendants:viewgroup会优先其子类控件而获取到焦点

        afterdescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点

        blocksdescendants:viewgroup会覆盖子类控件而直接获得焦点

  我们使用的是第三个。