2013-08-23 2 views
0

Я пытаюсь достичь следующей иерархии: GridView -> Каждый элемент представляет собой представление (назовем его «контейнером»), который содержит фон, ImageView и CheckBox.Android: добавьте представление в другое, имея прослушиватель кликов на родительском

Если пользователь нажимает на контейнер, не имеет значения, где, будь то над флажком, изображением или фоном, 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> 

После этого я хочу, чтобы иметь возможность получить проверенные контейнеры.

Я действительно не знаю, как создать этот макет. Даже в моем макете теперь все в порядке, нет «контейнера», который будет реагировать на прослушиватель кликов. Я могу только сделать checkbox реагировать на щелчок, что, конечно, не очень удобно. Итак, как я могу добавить контейнер-оболочку вокруг этих представлений, которые будут использоваться для нажатия? Большое спасибо!

ответ

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); 
       } 
      }); 
0

Вы также можете использовать setOnItemClickListener() метод GridView для установки щелчка слушателя для элемента (изображение +). И внутри вашего слушателя вы можете изменить установленное состояние флажка. Удачи!

Смежные вопросы