Android: Configuración de preferencias mediante programación

Tengo un pequeño ap con preferencias. En esta clase he configurado onPreferenceClick para obtener coordenadas desde el GPS. Cuando el oyente vuelve, mi esperanza era fijar el lat / long textedits automáticamente. He intentado cada muestra de la fuente hacia fuera allí, ninguna suerte:

public void onLocationChanged(Location l) { Log.d("H","Location Received: "+l.toString()); prefLocation.setSummary(l.toString()); SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); SharedPreferences.Editor editor1 = settings.edit(); editor1.putString("posLat","xxx"); editor1.commit(); } 

Cuando este código se ejecuta cuando hago clic en mi PreferenceScreen y el oyente de ubicación vuelve, la EditTextPreference con la clave "posLat" todavía muestra el valor anterior.

Me estoy volviendo loco tratando de averiguar qué está mal!

Mi prefs.xml:

 <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:key="My_Shared_Preferences"> <PreferenceCategory android:title="Your Location"> <PreferenceScreen android:title="Find Location..." android:key="location" android:summary="Click here to read your location automatically"/> <EditTextPreference android:title="Latitude" android:key="posLat" /> <EditTextPreference android:title="Longtitude" android:key="posLong" /> <EditTextPreference android:title="Altitude" android:key="posAlt" /> </PreferenceCategory> </PreferenceScreen> 

Alternativamente, tal vez hay una mejor manera de almacenar el valor de ubicación para una aplicación? Realmente no quiero que el usuario introduzca manualmente las coordenadas, pero no quiero recurrir a guardar y cargar un archivo de texto con la configuración, parece tan crudo.

He estado teniendo el mismo problema. Mi solución era utilizar las preferencias compartidas predeterminadas en lugar de las preferencias creadas manualmente con un nombre dado.

Cambie la referencia a SharedPreferences de esto:

 SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 

a esto:

 SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); 

Y ver si eso hace alguna diferencia.

Parece que esto realmente ha cambiado (ver 1 y 2 )

La nueva forma de hacerlo es

 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = preferences.edit(); editor.putBoolean(PREF_NAME, YOUR_VALUE); editor.commit(); 

¿Qué es "el valor antiguo". Con el código que has publicado parece que lo único que se va a almacenar en tus preferencias es la cadena "xxx" que necesitas reemplazar con una cadena que representa la ubicación dentro de tu método putString ().

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