2011-03-09 6 views
0

내가 안드로이드에 아주 새로운 그리고 난 그 항목을 다음과 같이 정의됩니다 사용자 정의 다중 선택 목록보기를 사용하기 위해 노력하고있어 발행 :다중 선택 목록보기 버튼 : 초점

<?xml version="1.0" encoding="utf-8"?> 
<com.jroy.android.views.CheckableLinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:gravity="left|center_vertical"> 
    <CheckBox 
     android:id="@+id/checkbox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0" 
     android:background="@drawable/checkbox_selector" 
     android:button="@null" /> 
    <TextView 
     android:id="@+id/name" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 
    <Button 
     android:id="@+id/btn_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0" 
     android:background="@drawable/button_view_selector" /> 
</com.jroy.android.views.CheckableLinearLayout> 

ListView에의 선택 모드 '선다형 문제'로 설정하고 CheckableLinearLayout가 확인 가능 인터페이스를 다음과 같은 방법으로 구현하고있는 LinearLayout의 서브 클래스입니다 :

public class CheckableLinearLayout extends LinearLayout implements Checkable { 

    private Checkable mCheckable;     

    @Override 
    protected void onFinishInflate() { 

     super.onFinishInflate(); 

     // Find checkable view 
     for (int i = 0, childCount = getChildCount(); i < childCount; ++i) { 
      View v = getChildAt(i); 
      if (v instanceof Checkable) { 
       mCheckable = (Checkable) v; 
       v.setFocusable(false); 
       v.setClickable(false); 
       break; 
      } 
     } 

    } 

    public CheckableLinearLayout(Context context) { 
     super(context); 
    } 

    public CheckableLinearLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean isChecked() { 
     return (mCheckable != null) 
       ? mCheckable.isChecked() 
       : false; 
    } 

    @Override 
    public void setChecked(boolean checked) { 
     if (mCheckable != null) { 
      mCheckable.setChecked(checked); 
     } 
    } 

    @Override 
    public void toggle() { 
     if (mCheckable != null) { 
      mCheckable.toggle(); 
     } 
    } 

} 

문제는 내가 어떤 항목을 확인할 수 없다는 것입니다을, 단지를 가질 수있는 버튼처럼 보인다 초점. 나는 초점에 대해 다른 것들을 시도했지만 제대로 작동하지 못했습니다 ...

달성하려는 일을하는 올바른 방법은 무엇입니까? 감사합니다,

답변

3

행 내부의 모든 컨트롤을 "포커스가 맞지 않음"으로 설정하십시오. ButtonCheckable을 구현하지 않아서 레이아웃에 setFocusable(false)이 없기 때문에 지금은 그렇지 않습니다.

 for (int i = 0, childCount = getChildCount(); i < childCount; ++i) { 
      View v = getChildAt(i); 
      v.setFocusable(false); 
      if (v instanceof Checkable) { 
       mCheckable = (Checkable) v; 
       v.setClickable(false); 
       break; 
      } 
     } 
+0

좋아 지금은 터치하여 일부 항목을 확인할 수 있습니다, 감사합니다,하지만 난 프로그래밍을 확인하려고 할 때 (CheckBox의 # setChecked (부울) 또는 ListView에 번호는 (INT, 부울) setItemChecked) 체크 박스의 모양을 변경되지 않습니다 (하지만 그 상태가 내가 원하는대로 올바르게 설정되어 있습니다) ... –

+0

죄송합니다, ListView # setItemChecked가 완벽하게 작동합니다. 세부 사항을 확인하기 위해 항목을 터치하는 동안 항목에 포함 된 단추도 '눌린 상태'로 표시됩니다. 아무도이를 해결하는 방법을 알고 있습니까? –