Supongamos que tengo una aplicación que guarda las preferencias en dos archivos, preferences1.xml y preferences2.xml. Entonces, puedo recuperar referencias a los objetos que corresponden con el siguiente código:Marco de casos múltiples SharedPreferences/archivos
SharedPreferences sharedPrefs1 = getSharedPreferences("preferences1", MODE_PRIVATE);
SharedPreferences sharedPrefs2 = getSharedPreferences("preferences2", MODE_PRIVATE);
De esta manera puedo manipular las preferencias de ambos y registrar detectores de cambios en ambos.
tengo algunas dudas sobre la inicialización de esos dos archivos, con setDefaultValues :
Pregunta 1 - PreferenceFragment contexto: He creado un PreferenceActivity con dos PreferenceFragments y dentro de la Método onCreate de cada uno Ejecuto el siguiente código (reemplace X con 1 y 2 para el fragmento 1 y 2):
PreferenceManager pm = getPreferenceManager();
pm.setSharedPreferencesName("preferencesX");
PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragmentX, false);
he visto que ambos fragmentos establecen correctamente sus preferencias con sus valores por defecto cuando se inicia .. pero, dado el hecho de que yo pueda ver un solo archivo _has_set_default_values.xml en los shared_prefs directorio de la aplicación, ¿Cómo se entiende cuando las propiedades de preferences1.xml y preferences2.xml ya se han configurado? Este archivo se crea tan pronto como setDefaultValues se llama en la primera abrió PreferenceFragment, pero incluso después de que, si abro la segunda PreferenceFragment inicializa correctamente los valores por defecto. ¿Cómo entiende que todavía no se ha inicializado preferences2.xml y cuál es el propósito de _has_set_default_values.xml dado el hecho de que no contiene información sobre qué archivos de preferencias se han inicializado?
Pregunta 2 - Actividad contexto estándar: cuando comienzo mi aplicación, la PreferenceActivity no es la primera actividad se inició y el usuario nunca podrá abrirla, así que me gustaría para inicializar los dos archivos de preferencias con su valores predeterminados también en la actividad principal, ¿cómo puedo hacer eso? Para las preferencias compartidas predeterminadas, es fácil:
PreferenceManager.setDefaultValues(this, R.xml.default_preferences, false);
Para dos archivos de preferencias, ¿cómo debo hacer? No puedo hacer algo como lo siguiente ya que no puedo recuperar una instancia de PreferenceManager como en las clases PreferenceFragment:
PreferenceManager pm = getPreferenceManager(); // NOT AVAILABLE AND NOT WANTED
pm.setSharedPreferencesName("preferences1");
PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragment1, false);
PreferenceManager pm = getPreferenceManager(); // NOT AVAILABLE AND NOT WANTED
pm.setSharedPreferencesName("preferences2");
PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragment2, false);
Aquí en la actividad principal no tengo la necesidad de cambiar los archivos de preferencias en el que PreferenceManager funcionará, ya que no estamos en una PreferenceActivity, simplemente quiero inicializar esos dos archivos ... ¿Alguna ayuda? Espero haber publicado una pregunta clara, incluso si es demasiado larga.
@crazymaik He borrado mi respuesta porque no creo responde la pregunta satisfactoriamente He pasado algunas horas investigando esto por ahora, y sigue siendo un completo misterio ... Espero que alguien más pueda arrojar algo de luz sobre él. –
¿puedes explicar más sobre SO Chat? – KOTIOS
intente utilizar un prefijo .Namespace dentro de un único archivo físico para gestionar 2 conjuntos lógicos o categorías de preferencias dentro de un identificador de archivo único. Sus respectivos fragmentos deberían poder aplicar el prefijo NS de una manera que no sea demasiado perjudicial para sus operaciones CRUD en las propiedades pref. –