我有一个如下所示定义的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);
}
}
答案 0 :(得分:1)
我自己找到了解决方案,感谢这个隐藏的(在网络上)宝石post
诀窍在于为所有setChecked
个孩子调用Checkable
,所以我只是在CheckableRelativeLayout中添加相关代码