Android 当选中可检查父项时,如何将复选框的checked设置为true?
我有Android 当选中可检查父项时,如何将复选框的checked设置为true?,android,android-layout,Android,Android Layout,我有列表视图,带有自定义的可检查的列表项布局。我的ListView在CHOICE\u MODE\u MULTIPLE模式下工作,我想选中选中选中的父项com.domain.CheckedRelativeLayout项的子项复选框。我怎么做 <?xml version="1.0" encoding="utf-8"?> <com.domain.CheckedRelativeLayout xmlns:android="http://schemas.android.com/apk/re
列表视图
,带有自定义的可检查的
列表项布局。我的ListView
在CHOICE\u MODE\u MULTIPLE
模式下工作,我想选中选中选中的父项com.domain.CheckedRelativeLayout
项的子项复选框。我怎么做
<?xml version="1.0" encoding="utf-8"?>
<com.domain.CheckedRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:descendantFocusability="blocksDescendants"
android:background="@drawable/selector">
<RelativeLayout
android:id="@+id/rl_data"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:paddingTop="2dp"
android:paddingBottom="2dp">
...
</RelativeLayout>
<CheckBox android:id="@+id/cb_select"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_margin="6dp"
android:text="" />
</com.domain.CheckedRelativeLayout>
因为您是在XML中定义子级,所以我只需遍历CheckedRelativeLayout中的所有子级,如果它们实现了Checkable,则对它们调用setChecked,并为CheckedRelativeLayout传递checked状态
如果改为在代码中构建布局(这意味着您可以保证子级始终存在),您可以在CheckedRelativeLayout的状态更改时切换复选框。而不是存储是否应选中可选中项的布尔值,而是存储对可选中项的引用:
public class CheckedRelativeLayout extends RelativeLayout implements Checkable {
private boolean mChecked;
private static final int[] CheckedStateSet = {
android.R.attr.state_checked
};
public CheckedRelativeLayout(Context context) {
super(context);
}
public CheckedRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean isChecked() {
Log.v(getClass().getName(), " IS CHECKED ");
return mChecked;
}
public void setChecked(boolean checked) {
if (mChecked != checked) {
mChecked = checked;
refreshDrawableState();
}
}
@Override
public void toggle() {
mChecked = !mChecked;
Log.v(getClass().getName(), " TOGGLE ");
}
@Override
protected int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isChecked()) {
mergeDrawableStates(drawableState, CheckedStateSet);
}
return drawableState;
}
@Override
public boolean performClick() {
toggle();
return super.performClick();
}
}