4

这太令人沮丧了。为什么在下面的代码中我的 PreferenceActivity 类中的首选项检索为空?

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

}

找到并传递的首选项名称是现有首选项的完全合法名称(“d_lightSensorLimit” - 与地图中第一个匹配并导致异常的确切名称)。之前构造函数中的纯文本字符串提取得非常好。这个方法也是从构造函数调用的(用这个方法的调用替换了巨大的条目列表):

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,因此不推荐使用的方法也是如此。它以前工作得很好。

4

0 回答 0