我正在尝试实现以下层次结构: 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>
在此之后,我希望能够检索已检查的容器。
我真的不知道如何创建这个布局。即使我的布局现在看起来没问题,也没有“容器”可以对点击监听器做出反应。我只能让复选框对点击作出反应,这当然不是非常用户友好。那么我怎样才能在这些用于点击的视图周围添加一个包装容器呢?非常感谢!
答案 0 :(得分: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);
}
});
答案 1 :(得分:0)
您还可以使用GridView的setOnItemClickListener()方法为项目设置点击侦听器(图像+复选框)。在监听器内部,您可以更改复选框的选中状态。 祝你好运!