将gridview项目可检查状态传播给子项

时间:2014-01-08 17:40:06

标签: android android-layout android-imageview android-gridview

我有一个如下所示定义的Gridview项目,我已经扩展了RelativeLayout以使其可以检查,这样可以正常工作。

现在我想要ImageView(在RelativeLayout中)接收可检查状态,所以我已经扩展了它,但是setChecked方法永远不会被调用,图像永远不会改变它的样式

我尝试将duplicateParentState设置为true但未成功添加到ImageView。

也许我的方法完全错误,如何在检查父RelativeLayout时更改ImageView样式?

grid_view_item.xml

<?xml version="1.0" encoding="utf-8"?>
<com.my.CheckableRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/gridview_selector"
    android:orientation="vertical" >

    <com.my.CheckableImageView
        android:id="@+id/thumbnail_image"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/place_holder" />

    <TextView
        android:id="@+id/caption"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/thumbnail_image"
        android:layout_centerHorizontal="true" />

</com.my.CheckableRelativeLayout>

CheckableRelativeLayout

public class CheckableRelativeLayout extends RelativeLayout implements Checkable {
    private boolean isChecked;

    /** all ctors removed for simplicity */

    public boolean isChecked() {
        return isChecked;
    }

    public void setChecked(boolean isChecked) {
        this.isChecked = isChecked;
        setSelected(isChecked);
    }

    public void toggle() {
        setChecked(!isChecked);
    }
}

CheckableImageView

public class CheckableImageView extends ImageView implements Checkable {
    private boolean isChecked;

    /** all ctors removed for simplicity */

    @Override
    public boolean isChecked() {
        return isChecked;
    }

    @Override
    public void setChecked(boolean checked) {
        isChecked = checked;
        setImageAlpha(isChecked ? 100 : 255);
    }

    @Override
    public void toggle() {
        setChecked(!isChecked);
    }
}

1 个答案:

答案 0 :(得分:1)

我自己找到了解决方案,感谢这个隐藏的(在网络上)宝石post

诀窍在于为所有setChecked个孩子调用Checkable,所以我只是在CheckableRelativeLayout中添加相关代码