2011-02-19 15 views
34

Ho un piccolo ap con le preferenze. In questa classe ho impostato onPreferenceClick per ottenere le coordinate dal GPS. Quando l'ascoltatore ritorna, la mia speranza è quella di impostare automaticamente il testo lat/long. Ho provato ogni campione fonte là fuori, senza fortuna:Android: impostazione delle preferenze a livello di programmazione

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

Quando questo codice viene eseguito quando clicco sul mio PREFERENCE e la posizione ritorna ascoltatore, l'EditTextPreference con il tasto "posLat" mostra ancora il vecchio valore.

Sto impazzendo cercando di capire cosa c'è che non va!

mio 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> 

In alternativa, forse c'è un modo migliore per memorizzare il valore di posizione per un'applicazione? Non voglio davvero che l'utente inserisca manualmente le coordinate, ma non voglio ricorrere al salvataggio e al caricamento di un file di testo con le impostazioni, sembra così rozzo.

risposta

32

Ho avuto lo stesso problema. La mia soluzione era usare le preferenze condivise predefinite invece delle preferenze create manualmente con un nome specifico.

Modificare il riferimento a SharedPreferences da questo:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 

a questo:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); 

e vedere se questo fa alcuna differenza.

+8

Amico, vorrei poterti comprare un caffè. Grazie mille! –

+9

Prego :) Hai faticato un po 'di tempo con quello, conosci le sensazioni. Prenderò un caffè e farò finta che fosse su di te;) –

0

Che cos'è "il vecchio valore". Con il codice che hai postato sembra che l'unica cosa che verrà memorizzata nelle tue preferenze sia la stringa "xxx" che dovrai sostituire con una stringa che rappresenta la posizione all'interno del tuo metodo putString().

+0

il vecchio valore è un numero arbitrario che ho digitato manualmente sulla schermata delle preferenze mentre eseguo la mia app. Vorrei che questo valore passasse a xxx. Non sono chiaro su cosa intendi "sostituiscilo con una stringa che rappresenta la posizione all'interno del tuo metodo putString()". Grazie per la risposta. –

8

sembra che questo abbia effettivamente cambiato (vedi 1 e 2)

Il nuovo modo di fare questo è

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