У меня есть группа предпочтений под названием "Учетные данные", и я хотел бы изменить цвет этого заголовка на основании того, действительны ли учетные данные или нет.
Я сохраняю ссылку на элемент учетных данных, хватая его, когда я запускаю свою функцию 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);
}
}
Ум, это выглядит хорошо. Вы уверены, что вызов updateCreditialsBarColor()
вызван? В конце концов, есть опечатка в имени метода AFAICT.
Вы также можете сбросить некоторую информацию о регистрации в этом методе и сравнить ее с результатами проверки вашей активности в средстве просмотра иерархии, чтобы узнать, получаете ли вы View
, который, по вашему мнению, вы.
Вы также можете подумать о создании пользовательского подкласса любого Preference
, который инкапсулирует это поведение.