GridView也是列表View,与ListView相比,他的列数不固定,与Gallery相比,他的行数大于1,所以GridView算是集成了ListView和Gallery。我们知道,如果要实现GridView中的Item的点击事件,直接设置OnItemClickListener即可。但是会有这样的情况,子Item中想要单独实现个别的点击事件,这时一个Item就会有两种点击事件,一个是整体的Item的点击事件,另一个是Item中的子View 的点击事件,此时如果掌控不好的话,无法实现双重点击。上网搜也有很多的解决办法,但是最后都没有生效,今天就分享我是如何实现在Item中有checkBox,同时实现checkBox的点击事件和Item的点击事件。
这是Item的布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@dimen/image_thumbnail_size"
android:layout_height="@dimen/image_thumbnail_size">
<ImageView
android:id="@+id/item_image"
android:scaleType="fitXY"
android:visibility="gone"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<LinearLayout android:id="@+id/check_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:layout_alignParentRight="true"
android:layout_margin="4dp">
<CheckBox android:id="@+id/item_check"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:button="@drawable/local_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout android:id="@+id/take_photo_parent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="gone"
android:gravity="center">
<TextView android:id="@+id/take_photo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/take_photo"
android:singleLine="true"
android:drawableTop="@drawable/default_image"/>
</LinearLayout>
</RelativeLayout>
我们可以看出checkBox在Item的右上角,由于一个界面同时只能有一个view有焦点,一般Item中如果有类似Button,checkBox控件,则他们会抢占Item的焦点,使OnItemClickListener 无法实现。此时在代码中已设置checkBox的clickable = false,focusable= false。focusableInTouchMode = false,此时只会实现Item的点击事件,那我们可以在checkBox外添加一个线性布局,整个线性布局实现点击事件,在点击事件的实现方法中实现checkbox的点击,就OK啦!