FindPreference devuelve NULL en el prefit nombre pref

Es muy frustrante. ¿Por qué estoy obteniendo null en la recuperación de preferencias en mi clase PreferenceActivity en el código siguiente?

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

El pref nombre encontrado y pasado es perfectamente legítimo nombre de pref existente ("d_lightSensorLimit" – el exacto apareció primero en el Mapa y causando la excepción). Y fue extraer perfectamente bien por la cadena de texto sin formato en el constructor antes. Este método es llamado desde el constructor también (reemplazó la enorme lista de entradas allí con llamada de este método):

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

Por la solicitud de la gente aquí es el extracto relevante del 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> 

Estoy apuntando 2.1 por lo que es el método obsoleto en uso. Y funcionaba perfectamente bien antes.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.