Question

I have a preference group called "Credentials" and I'd like to change the color of that header based on whether the credentials are valid or not.

I keep a reference to the credentials item by grabbing it when I start up my 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 ...
}

Once I am done verifying my credentials I run a function called updateCredentialsBarColor that is supposed to load the correct drawable and set the credentials Preference to the appropriate color. Though when I try to change the color nothing happens. Am I getting the view incorrectly and if so, what is the proper way to get it?

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);
    }
}
Was it helpful?

Solution

Um, that looks good. Are you sure updateCreditialsBarColor() gets called? After all, there's a typo in the method name, AFAICT.

You might also dump some logging information in that method and compare it to the results of examining your activity in Hierarchy Viewer to see if you're getting the View you think you are.

You might also consider creating a custom subclass of whatever Preference this is that encapsulates this behavior.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top