令人沮丧。为什么我在以下代码中的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,因此使用中已弃用的方法也是如此。它之前的工作非常好。