2011-03-09 24 views
5

Tengo un PreferencesActivity que muestra un preferences.xml con casillas de verificación.Android Obtener claves de preferences.xml

preferences.xml:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
<PreferenceCategory android:title="Keywords"> 
    <CheckBoxPreference android:key="Essen" 
         android:title="Essen" 
         android:selectable="true" 
         android:enabled="true" 
         android:persistent="false"> 
    </CheckBoxPreference> 
    <CheckBoxPreference android:key="Kleidung" 
         android:title="Kleidung" 
         android:selectable="true" 
         android:enabled="true" 
         android:persistent="false"> 
    </CheckBoxPreference> 
</PreferenceCategory> 
</PreferenceScreen> 

PreferencesActivity:

public class PreferencesViewController extends PreferenceActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
    } 
} 

ahora de una manera diferente ListActivity quiero mostrar todas las llaves/Títulos de las casillas marcadas.

intento acceder a las preferencias con

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

o

SharedPreferences prefs = getSharedPreferences("mypackage_preferences", 0); 

Pero tanto realmente no funciona.

Cuando llamo prefs.getAll().size() el resultado es 0.

que puede acceder a las claves/Título con getPreferenceScreen().getPreference(i).… pero no funciona de una diferente Activity, sólo desde el PreferenceActivity.

¿Alguien tiene una solución sobre cómo hacer esto?

Respuesta

0

utilizo

SharedPreferences prefs = 
    PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

Y entonces puedo acceder a las preferencias a través de prefs.get...(), por ejemplo, prefs.getString(key). ¿Has probado esto?

Editar: sólo nos registramos - prefs.getAll() funciona como espera y devuelve un Map con todas las preferencias.

+0

bastante bueno en esto. – liquid

+0

El problema es que quiero actualizar estas preferencias desde Internet/Servidor. Así que no sé las claves para cada casilla de verificación. Entonces, las Preferencias deben mostrarse en una Actividad/Vista, el Usuario puede marcarlas/desmarcarlas. Tengo que leer las preferencias comprobadas y las preferencias deben ser actualizadas por un servidor ... ¿quizás la PreferenceActivity no es la solución correcta? : -/ – liquid

0

Debe utilizar

SharedPreferences prefs = referenceManager.getDefaultSharedPreferences(this); 

Las preferencias pueden estar vacía si nunca los has establecido a través de la PreferencesActivity. También creo que su ListActivity tiene que estar en el mismo paquete que PreferencesActivity.

3

No necesita un PreferenceActivity para lograr esto.

Para acceder a las preferencias, los que se utilizan en su PreferenceActivity, se debe utilizar

SharedPreferences prefs = 
    PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

Si su lista de datos proviene del servidor, que se puede utilizar un/cualquier actividad personalizada ListActivity/ExpandableListActivity de visualizar pero, de esta manera, debe escribir los controladores que cambian las preferencias.

La forma más común de hacer esto sería:

private void saveStringPreference(final String key, final String value) 
{ 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putString(key, value); 
    editor.commit(); 
} 

Si usted necesita, usted debe crear contenedores similares para hacer frente a int, boolean, etc. valores.

+1

Gracias. He estado buscando esta respuesta durante aproximadamente una hora. Tenía un preferences.xml y preferences.java pero quería usar otra pantalla para establecer los valores. Gracias de nuevo. – EGHDK

+0

¿Por qué 'getBaseContext()'? –

+0

Supongo que nunca lo sabremos – Denny

1

Tuve este problema también. Este es un clásico RTFM, por desgracia.Usted debe poner la siguiente línea en el método de su MainActivity onCreate():

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

Esta información se puede encontrar en el apartado "Configuración de valores predeterminados" de http://developer.android.com/guide/topics/ui/settings.html

Cuestiones relacionadas