findPreference在legal pref名称上返回NULL

时间:2012-10-23 00:56:09

标签: android sharedpreferences

令人沮丧。为什么我在以下代码中的PreferenceActivity类中的首选项检索中获取null?

private void setupSpecialPrefClickListener(SettingsSystem settingsSystem) {
    Map<String,?> keys =    PreferenceManager.getDefaultSharedPreferences(this).getAll();
    for(Map.Entry<String,?> entry : keys.entrySet()){
        String key = entry.getKey();
        if( key.startsWith("d_")) {
            Preference p = findPreference((CharSequence)key);
            //p == NULL!!!!!
                            p.setOnPreferenceClickListener(this);
        }
    }

}

找到并传递的pref名称是现有pref的完全合法的名称(“d_lightSensorLimit” - 在Map中首先匹配并导致异常的确切名称)。并且它之前通过构造函数中的纯文本字符串完全提取。也可以从构造函数中调用此方法(通过调用此方法替换了大量的条目列表):

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings_system);  
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

    setupSpecialPrefClickListener(this);
}

此处的人员请求是settings_system.xml的相关摘录:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<Preference
    android:defaultValue="0"
    android:dialogTitle="Night mode on lux (0-disable)"
    android:inputType="phone"
    android:key="d_lightSensorLimit"
    android:layout="@layout/pref"
    android:title="Automatic nightmode" />
</PreferenceScreen>

我的目标是2.1,因此使用中已弃用的方法也是如此。它之前的工作非常好。

0 个答案:

没有答案