2013-06-12 1 views
0

를 작동하지 setItemChecked :내가 목록보기 항목에서 텍스트의 모양을 변경하려면 다음 선택기를 사용하고 진저 브레드

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" 
      android:color="#FFFFFFFF" /> <!-- checked --> 
    <item android:state_activated="true" 
      android:color="#FFFFFFFF" /> <!-- activated --> 
    <item android:state_pressed="true" 
      android:color="#FFFFFFFF" /> <!-- pressed --> 
    <item android:state_focused="true" 
      android:color="#FFFFFFFF" /> <!-- focused --> 
    <item android:color="#FF000000" /> <!-- default --> 
</selector> 

전체 선택은 안드로이드의 최신 버전에서 잘 작동 (ICS, JB) 만에 진저 브레드는 pressed_state 항목이 올바르게 적용되는 동안 listView에서 setItemChecked를 호출하면 state_checked 항목이 적용되지 않습니다. 이런 일이 발생하는 이유

<TextView 
     android:id="@+id/item_text" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:layout_marginTop="8dp" 
     android:layout_marginLeft="8dp" 
     android:paddingRight="10dp" 
     android:ellipsize="end" 
     android:layout_toRightOf="@id/item_thumb" 
     android:maxLines="1" 
     android:scrollHorizontally="true" 
     android:textStyle="bold" 
     android:textSize="16sp" 
     android:textColor="@color/selected_text_selector" 
     /> 

사람이 알고 있나요 :

@Override 
protected void onResume() 
{ 
    super.onResume(); 

    getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
    for (int index = 0; index < measureList.size(); index++) 
    { 
     if (measureList.get(index).getId() == appContext.getMeasureId()) 
     { 
      getListView().setItemChecked(index, true); 
     } 
    } 
} 

과 선택을 설정하는 데 사용되는 XML은 이것이다 : 다음과 같이

내가 항목을 설정하기 위해 사용하고있는 코드는? 나는 GB와 ICS 사이의 Android 버전에서 아직 테스트하지 않았지만 최대한 빨리이 게시물을 편집 할 것입니다.

+0

이 질문을 확인하십시오 : http://stackoverflow.com/questions/3742979/how-to-get-a-android-listview-item-selector-to-use-state-checked – Voicu

+0

팁 주셔서 감사합니다. 그게 작동하지 않는 것 같아요 ... – sleeke

+0

Voicu에 대한 생각을 빨리 쏴서 죄송합니다 - 해결책을 찾도록하겠습니다. – sleeke

답변

7

조금 검색 한 후, 상기 state_checked 미리 벌집 표현 ViewsetActive 방법이 선택 상태가 아니라고 API 레벨이 수단 (11) 이전에 가능하지 않다는 사실 아니라고 상기 이유로 보인다 내 레이아웃의 자식 뷰에 전달됩니다.

키 :

  1. 스왑 CheckedTextView
  2. 에 대한 TextView 아이들

1)에 부모 뷰에서 체크 상태를 전파하는 것은 XML의 간단한 스위치 되었습니까 , 2) Voicu와 연결된 답변의 코드를 다음과 같이 수정했습니다.

public class CheckableRelativeLayout extends RelativeLayout implements Checkable 
{ 
    private boolean checked = false; 

    public CheckableRelativeLayout(Context context) { 
     super(context, null); 
    } 

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

    private static final int[] CheckedStateSet = { 
      R.attr.state_checked 
    }; 

    @Override 
    protected void dispatchSetPressed(boolean pressed) 
    { 
     super.dispatchSetPressed(pressed); 
     setChecked(pressed); 
    } 

    @Override 
    public void setChecked(boolean checked) { 
     this.checked = checked; 
     for (int index = 0; index < getChildCount(); index++) 
     { 
      View view = getChildAt(index); 
      if (view.getClass().toString().equals(CheckedTextView.class.toString())) 
      { 
       CheckedTextView checkable = (CheckedTextView)view; 
       checkable.setChecked(checked); 
       checkable.refreshDrawableState(); 
      } 
     } 
     refreshDrawableState(); 
    } 

    public boolean isChecked() { 
     return checked; 
    } 

    public void toggle() { 
     checked = !checked; 
     refreshDrawableState(); 
    } 

    @Override 
    protected int[] onCreateDrawableState(int extraSpace) { 
     final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); 
     if (isChecked()) { 
      mergeDrawableStates(drawableState, CheckedStateSet); 
     } 
     return drawableState; 
    } 

    @Override 
    public boolean performClick() { 
     return super.performClick(); 
    } 
} 
+1

R.attr.state_checked는 어디에 정의되어 있습니까? 그것은 내 자신의 패키지에 있어야 하는가, 아니면 정말로 android.R.attr.state_checked 속성인가? 내 패키지에 있어야하는 경우 가져 오기 또는 관련 attr.xml 파일을 보는 것이 도움이됩니다. – Baron

+1

@Baron :이 질문 이후 오랜 시간이 지났기 때문에이 코드가 사용 된 곳을 더 이상 기억할 수 없으며 가져 오기 또는 xml 파일을 찾을 수 없지만 거의 확실합니다. 생각대로 android.R.attr.state_checked를 참조하십시오. 수입에 좋은 점. 나는 미래의 질문에 그들을 포함시킬 것입니다! – sleeke

+0

@sleeke for future questions : 예, 사용 된 속성은 "android.R.attr state_checked."입니다. 완벽하게 테스트되고 작동되었습니다. 고맙습니다! –

관련 문제