2011-01-07 4 views
1

"자격 증명"이라는 기본 설정 그룹이 있는데 자격 증명의 유효성 여부에 따라 해당 헤더의 색을 변경하고 싶습니다. 내 자격 증명을 확인 마쳤하고 일단 내 PreferenceActivity를특정 환경 설정 항목의 배경 변경

// ... code ... 
public enum CredentialsInfo { 
    VALID, INVALID, UNKNOWN 
} 

private Preference credentials; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.my_preferences); 

    credentials = findPreference(getString(R.string.credentials)); 
    // ... etc ... 
} 

을 시작할 때

내가 그것을 잡아서 자격 증명 항목에 대한 참조를 유지 나는 올바른 드로어 블을로드하도록되어 updateCredentialsBarColor를라는 함수를 실행하고 자격 증명 환경 설정을 적절한 색으로 설정하십시오. 색상을 변경하려고하면 아무 일도 일어나지 않습니다. 내가보기를 잘못 얻었습니까? 그렇다면 올바른 방법은 무엇입니까?

private void updateCreditialsBarColor(CredentialsInfo state) { 
    Drawable background = null; 
    switch(state) { 
    case VALID: 
     background = getResources().getDrawable(R.drawable.credentials_state_valid); 
     break; 
    case INVALID: 
     background = getResources().getDrawable(R.drawable.credentials_state_invalid); 
     break; 
    case UNKNOWN: 
    default: 
     background = getResources().getDrawable(R.drawable.credentials_state_unknown); 
     break; 
    } 
    if(background != null) { 
     View credentialsView = credentials.getView(null, null); 
     credentialsView.setBackgroundDrawable(background); 
    } 
} 

답변

1

음. updateCreditialsBarColor()가 호출 되나요? 결국 메서드 이름에 오타가 있습니다. AFAICT.

해당 방법에서 일부 로깅 정보를 덤프하고 계층 뷰어에서 활동을 검사 한 결과와 비교하여 사용자가 생각하는대로 View인지 확인하십시오.

이 동작을 캡슐화하는 Preference의 사용자 지정 하위 클래스를 만드는 것도 좋습니다.