2010-05-20 14 views
50

Il mio problema è che quando avvio l'applicazione e l'utente non apre il mio PreferenceActivity così quando li recupero non ottengo alcun valore predefinito definito nel mio file preference.xml.Inizializza le preferenze da XML nell'attività principale

file di preference.xml:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
    android:key="applicationPreference" android:title="@string/config" 
    > 
    <ListPreference 
      android:key="pref1" 
      android:defaultValue="default" 
      android:title="Title" 
      android:summary="Summary" 
      android:entries="@array/entry_names" 
      android:entryValues="@array/entry_values" 
      android:dialogTitle="@string/dialog_title" 
    />     
</PreferenceScreen> 

Snippet dalla mia attività principale (onCreate metodo):

SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this);   
    String pref1 = appPreferences.getString("pref1", null); 

In seguito io alla fine con un valore null.

risposta

105

In onCreate() del telefono principale Activity è sufficiente chiamare il numero the PreferenceManager.setDefaultValues() method.

PreferenceManager.setDefaultValues(this, R.xml.preference, false); 

Questo leggerà il file preference.xml e impostare i valori di default definiti là. L'impostazione dell'argomento readAgain su false significa che verranno impostati solo i valori predefiniti se questo metodo non è mai stato chiamato in passato, quindi non è necessario preoccuparsi di ignorare le impostazioni dell'utente ogni volta che viene creato il proprio Activity.

+4

ma qualcuno ha il campione o il modello per questo perference.xml come riferimento? –

+8

Mi hai salvato la giornata! Sono stato alla ricerca di 3 ore al valore nullo, alle 3 'di notte in un aeroporto con il wi-fi tethering. Grazie! – Cimm

+1

@Dave Webb Questo non funziona per le preferenze di stringa. – Anderson

8

La vostra chiamata a getString() ha il null come secondo parametro. Cambia quello per essere il valore predefinito che vuoi.

+6

Questa è una soluzione molto elegante. +1. Tuttavia, per ottenere ciò che l'OP voleva, PreferenceManager.setDefaultValues ​​() è la soluzione. – ef2011

14

Sarò breve. :)

strings.xml (in realtà devo prefs.xml esclusivamente per le preferenze):

<string name="pref_mypref_key">mypref</string> 
<string name="pref_mypref_default">blah</string> 

preferences.xml:

android:key="@string/pref_mypref_key" 
android:defaultValue="@string/pref_mypref_default" 

MyActivity.java :

String myprefVal = prefs.getString(getString(R.string.pref_mypref_key), getString(R.string.pref_mypref_default)); 
+0

Grazie, questa è in realtà la risposta alla mia altra domanda su dove memorizzare le preferenze: :) ​​Se riuscirò a combinarlo con la migliore risposta a questa domanda sarà fantastico! – pixel

+2

Apparentemente, in questo esempio, questa riga apparirà in 'MyActivity.java' prima dell'assegnazione di' myprefVal': 'PreferenzePreferenze condivise = PreferenceManager.getDefaultSharedPreferences (this);' – hotshot309

+3

Questo funziona, ma dovrebbe essere davvero necessario? – JohnyTex

Problemi correlati