2012-10-04 3 views
0

사용자 정의 Checkable 목록 항목 레이아웃이있는 ListView입니다. 내 ListViewCHOICE_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(); 
    } 

} 
+0

Checkable을 선택해야하는지 여부를 부울 값으로 저장하는 대신 checkable에 대한 참조를 저장합니다. [ListView 행의 CheckedTextView 체크 표시가 나타나지 않음] (http://stackoverflow.com/q/12125792/1267661) – Sam

답변

1

, 난 그냥 CheckedRelativeLayout에있는 모든 어린이를 반복 것입니다 그들은 확인 가능을 구현하는 경우, 그들에 setChecked 호출하고 전달 CheckedRelativeLayout에 대해 검사 된 상태입니다.

대신 코드로 레이아웃을 빌드한다면 (CheckedRelativeLayout의 상태가 변경 될 때 자식이 항상 존재한다는 것을 의미합니다) 체크 상자를 토글 할 수 있습니다.

관련 문제