0
사용자 정의 Checkable
목록 항목 레이아웃이있는 ListView
입니다. 내 ListView
는 CHOICE_MODE_MULTIPLE
모드에서 작동하며 체크 한 자녀 CheckBox
체크 한 부모의 시신 com.domain.CheckedRelativeLayout
항목을 확인하고 싶습니다. 내가 어떻게 해?Checkable 부모가 첵크되었을 때 CheckBox를 true로 설정하는 방법은 무엇입니까?
<?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 어린이를 정의하고 있기 때문에
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();
}
}
Checkable을 선택해야하는지 여부를 부울 값으로 저장하는 대신 checkable에 대한 참조를 저장합니다. [ListView 행의 CheckedTextView 체크 표시가 나타나지 않음] (http://stackoverflow.com/q/12125792/1267661) – Sam