0

我正在尝试实现以下层次结构:GridView -> 每个项目都是一个包含背景、ImageView 和 CheckBox 的视图(我们称之为“容器”)。

如果用户单击容器,无论是在复选框、图像还是背景上,CheckBox 都应该将其更改为选中状态。

现在我有以下布局:

<!-- main layout -->
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
    <Button android:id="@+id/selectBtn"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:text="Select" android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:minWidth="200dp" />
    <GridView android:id="@+id/imageGridView"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:numColumns="auto_fit" android:verticalSpacing="10dp"
        android:horizontalSpacing="10dp" android:columnWidth="90dp"
        android:stretchMode="columnWidth" android:gravity="center"
        android:layout_above="@id/selectBtn" />
</RelativeLayout>

<!-- gallery item layout - every grid item is inflated from this -->
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent">
    <ImageView 
        android:id="@+id/thumbImage" 
        android:layout_width="110dp" 
        android:layout_height="110dp"
        android:background="#999999"
        android:layout_centerInParent="true"
        android:contentDescription="image thumb"/>
    <CheckBox
        android:id="@+id/itemCheckBox" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true" 
        android:layout_alignParentTop="true" />
</RelativeLayout>

在此之后,我希望能够检索已检查的容器。

我真的不知道如何创建这个布局。即使我的布局现在看起来还不错,也没有“容器”会对点击监听器做出反应。我只能让复选框对点击做出反应,这当然不是很人性化。那么如何在这些视图周围添加一个用于单击的包装容器呢?非常感谢!

4

2 回答 2

0

啊,没关系......由于RelativeLayout扩展了View和ViewGroup,我可以使用类似的东西:

RelativeLayout container = (RelativeLayout) holder.imageview.getParent();
container.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    Log.d("test", "clicked");
                    RelativeLayout cont = (RelativeLayout) v;
                    CheckBox cb = (CheckBox) cont.getChildAt(1);
                    if(cb.isChecked()) cb.setChecked(false);
                    else cb.setChecked(true);
                }
            });
于 2013-08-23T17:41:40.187 回答
0

您还可以使用GridView 的setOnItemClickListener()方法来设置项目的单击侦听器(图像+复选框)。在您的侦听器中,您可以更改复选框的选中状态。祝你好运!

于 2013-08-23T18:04:31.090 回答