2010-05-20 13 views
50

Mi problema es que cuando inicio la aplicación y el usuario no abría mi PreferenceActivity, así que cuando los recupero no obtengo ningún valor predeterminado definido en mi archivo preference.xml.Inicializar las preferencias de XML en la actividad principal

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

de fragmentos de mi actividad principal (onCreate método):

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

En consecuencia termino con un valor null.

Respuesta

105

En onCreate() de su teléfono principal Activity simplemente llame al the PreferenceManager.setDefaultValues() method.

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

Esto leerá el archivo de preference.xml y establecer los valores predeterminados definidos allí. Establecer el argumento readAgain en false significa que esto solo establecerá los valores predeterminados si nunca se ha llamado a este método en el pasado, por lo que no tendrá que preocuparse por anular la configuración del usuario cada vez que se cree Activity.

+4

pero ¿alguien tiene la muestra o plantilla para este perference.xml para referencia? –

+8

¡Me salvaste el día! He estado buscando 3 horas en el valor nulo, a las 3 en punto de la noche en un aeropuerto con conexión wifi. ¡Gracias! – Cimm

+1

@Dave Webb Esto no funciona para las preferencias de cadena. – Anderson

8

Su llamada a getString() tiene null como el segundo parámetro. Cambie eso para que sea el valor predeterminado que desee.

+6

Esta es una solución muy elegante. +1. Sin embargo, para lograr lo que el OP quería, el PreferenceManager.setDefaultValues ​​() es la solución. – ef2011

14

Seré breve. :)

strings.xml (De hecho, he prefs.xml exclusivamente para las preferencias):

<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

Gracias, esto en realidad es la respuesta a mi otra pregunta sobre dónde almacenar claves de preferencia :) Si podré combinarlo con la mejor respuesta a esta pregunta, ¡será genial! – pixel

+2

Aparentemente, en este ejemplo, esta línea aparecería en 'MyActivity.java' antes de la asignación de' myprefVal': 'SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences (this);' – hotshot309

+3

Esto funciona, pero ¿debería ser realmente necesario? – JohnyTex

Cuestiones relacionadas