2011-03-02 8 views
20

Mi primer intento de preferencias fue sin conocimiento de PreferenceActivity. Entonces ahora tengo una aplicación que almacena todas las preferencias del usuario en un archivo de preferencias específico.¿Cómo puede utilizar PreferenceActivity un archivo de preferencias personalizadas

Quiero migrar a utilizar una actividad de preferencia pero también quiero que mis usuarios mantengan sus preferencias.

¿Hay alguna manera de decirle a mi PreferenceActivity que use ese archivo específico para todas las preferencias?

+0

Puede escribir un método que lea sus preferencias anteriores y las guarde como preferencias regulares – Maaalte

+0

Pensé en la migración como una solución. ¿Pero entonces nunca podré deshacerme del código de migración? No hay forma de garantizar que no haya versiones anteriores de mi aplicación. – Yashima

Respuesta

1

Se podía leer todas las preferencias en el comienzo de su aplicación, y luego almacenarlos en el Preferences usando

Editor e = PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit(); 
e.putBoolean("yourPreference", true); 
e.putString("yourOtherPreference", "This is the Value"); 
... 
e.commit(); 

Yo espero que ayude

+0

Implementé esta variante ahora, aunque inicialmente prefería cambiar el nombre de la idea del archivo de Andrew. Sin embargo, nunca descubrí cómo hacer esto último, así que me quedé con lo obvio. ¡Gracias! – Yashima

+0

bueno, estoy contento de que haya ayudado! – raukodraug

0

Maaalte es correcto, lo que quiere hacer es onCreate prueba para la existencia de su archivo personalizado y si está allí, cambie el nombre a nombre de archivo de preferencias compartidas estándar.

Otra opción es leer las preferencias anteriores una a una y usar la API de preferencias compartidas para agregarlas a medida que las lee y luego eliminar las preferencias anteriores cuando haya terminado.

63

Puede ser demasiado tarde para publicar esto, pero se puede encontrar una buena solución a este problema

Se establece el nombre del archivo de preferencias por defecto compartida previamente de esta manera:

public class MyPreferencesActivity extends PreferenceActivity { 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     PreferenceManager prefMgr = getPreferenceManager(); 
     prefMgr.setSharedPreferencesName("my_preferences"); 
     prefMgr.setSharedPreferencesMode(MODE_WORLD_READABLE); 

     addPreferencesFromResource(R.xml.preferences); 
    } 
} 

Espero que esto ayude a alguien.

Atentamente.

+4

Buena respuesta (aunque obsoleta ...) Editada porque el enlace estaba roto, y copiado el código del enlace. Aunque en mi humilde opinión es un error usar 'MODE_WORLD_READABLE'. –

Cuestiones relacionadas