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);
    }
}
4

1 回答 1

1

嗯,看起来不错。你确定updateCreditialsBarColor()会被叫到吗?毕竟,方法名称 AFAICT 中有一个拼写错误。

您还可以在该方法中转储一些日志信息,并将其与在 Hierarchy Viewer 中检查您的活动的结果进行比较,以查看您是否得到了View您认为的结果。

您还可以考虑创建Preference封装此行为的任何 this 的自定义子类。

于 2011-01-08T01:25:57.910 回答