2011-02-19 33 views
34

Tengo una pequeña API con preferencias. En esta clase he configurado el onPreferenceClick para obtener coordenadas del GPS. Cuando el oyente vuelve, mi esperanza era establecer los textext de latitud/longitud automáticamente. He intentado todas las muestras de fuente por ahí, sin suerte:Android: Configuración de preferencias programáticamente

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 pantalla PREFERENCE y la ubicación rendimientos del oyente, la EditTextPreference con la tecla "posLat" sigue mostrando el valor antiguo.

¡Me estoy volviendo loca tratando de descubrir qué pasa!

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> 

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

Respuesta

32

He tenido el mismo problema. Mi solución fue usar las preferencias compartidas predeterminadas en lugar de las preferencias creadas manualmente con un nombre dado.

cambiar la referencia a SharedPreferences de esto:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 

a esto:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); 

y ver si hay alguna diferencia.

+8

Amigo, me gustaría poder comprarte un café. ¡Un millón de gracias! –

+9

De nada :) Lucharon un tiempo con eso también, conocen la sensación. Tomaré un café y pretenderé que fue contigo;) –

0

¿Qué es "el valor anterior". Con el código que ha publicado parece que lo único que se almacenará en sus preferencias es la cadena "xxx" que necesita reemplazar con una cadena que representa la ubicación dentro de su método putString().

+0

El valor antiguo es un número arbitrario que he escrito en forma manual en la pantalla de preferencias mientras ejecuto mi aplicación. Me gustaría que este valor cambie a xxx. No tengo claro lo que quieres decir con "reemplazar eso con una cadena que represente la ubicación dentro de tu método putString()". Gracias por responder. –

8

parece que esta realidad ha cambiado (ver 1 y 2)

La nueva manera de hacer esto es

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