ListView OnItemClickListener无作用

来源:互联网 发布:实战nginx 编辑:程序博客网 时间:2024/06/08 14:14

最近在做音乐播放器,想仿天天动听在歌曲名字前面加上一个心形的图片,点击图片,即可以变成喜欢的歌曲。在实现的过程中,使用的控件是ImageButton(因为考虑到点击功能,其实也可以直接使用ImageView)。但是最后通过自定义的适配器把所有歌曲都显示出来后,发现ListView的点击功能无作用,根本不会运行OnItemClick,即使代码中强制把焦点给ListView也不行。最后才发现是ImageButton搞得鬼(若是换成ImageView就不会有问题)。

使用ViewGroup中的一个属性android:descendantFocusability来解决此问题。

该属性是当一个View获取焦点的时候,定义ViewGroup和它子控件两者的关系。

android:descendantFocusability="blocksDescendants"
beforeDescendants--------ViewGroup优先  0
afterDescendants----------子控件不需要的时候才给ViewGroup  1
blocksDescendants--------ViewGroup覆盖子类控件而直接获得焦点  2

通常用到第三种,在Item布局的根布局上加android:descendantFocusability="blocksDescendants"就可以了。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:descendantFocusability="blocksDescendants"    android:orientation="vertical" >    <LinearLayout        android:layout_width="match_parent"        android:layout_height="60dp"        android:orientation="horizontal" >        <LinearLayout            android:layout_width="wrap_content"            android:focusable="false"            android:layout_height="50dp" >            <ImageButton                android:id="@+id/fav_music_button"                android:layout_width="32dp"                android:layout_height="32dp"                android:layout_gravity="center"                android:paddingLeft="6dp"                android:background="@drawable/heart" />        </LinearLayout>    </LinearLayout></LinearLayout>

0 0