Изменить фон определенного элемента предпочтения - PullRequest
1 голос
/ 08 января 2011

У меня есть группа предпочтений под названием «Учетные данные», и я хотел бы изменить цвет этого заголовка в зависимости от того, действительные учетные данные или нет.

Я сохраняю ссылку на элемент учетных данных, захватывая его при запуске 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 Ответ

1 голос
/ 08 января 2011

Хм, это выглядит хорошо.Вы уверены, что updateCreditialsBarColor() будет вызван?В конце концов, в названии метода есть опечатка AFAICT.

Вы также можете сбросить некоторую информацию о регистрации в этом методе и сравнить ее с результатами проверки вашей активности в Hierarchy Viewer, чтобы увидеть, получаете ли выView вы думаете, что это так.

Вы могли бы также рассмотреть возможность создания собственного подкласса любого типа Preference, который инкапсулирует это поведение.

...