¿Cómo forzar a PreferenceActivity a manejar mis SharedPreferences?

Estoy usando SharedPreferences para almacenar mis datos en todas las Activities dentro de mi aplicación. Tengo acceso a ella de esta manera:

 SharedPreferences mSharedPreferences = getSharedPreferences("MyPrefs", 0); 

He implementado PreferenceActivity para que los usuarios puedan cambiar los valores a través de él, pero sucede que lee / escribe datos no a "MyPrefs" sino a:

 PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

Que es un poco inesperado para mí. ¿Es posible forzar a PreferenceActivity a tratar con mis preferencias de "MyPrefs"? ¿Y cuál es el punto de tener varias preferencias dentro de una sola aplicación? Gracias.

3 Solutions collect form web for “¿Cómo forzar a PreferenceActivity a manejar mis SharedPreferences?”

Tengo acceso a ella de esta manera

Eso está bien, siempre y cuando usted no estaba planeando usar PreferenceActivity .

He implementado PreferenceActivity para que los usuarios puedan cambiar los valores a través de él

¡Vaya!

Además, deshágase de getApplicationContext() allí, a menos que tenga una razón específica para utilizar la Application lugar de la actividad / servicio / lo que sea. Sólo utilice el objeto Application cuando tenga que hacerlo y sepa por qué tiene que hacerlo.

¿Es posible forzar a PreferenceActivity a tratar con mis preferencias de "MyPrefs"?

No es fácil. A menos que tenga alguna razón específica para inventar su propio archivo SharedPreferences , usaría el predeterminado.

¿Y cuál es el punto de tener varias preferencias dentro de una sola aplicación?

Es posible que tenga una biblioteca o un componente reutilizable que desee almacenar cosas en SharedPreferences y que pueda tener su propio archivo para no estropear las preferencias de la aplicación de alojamiento. Dicho esto, los archivos de preferencia múltiples no son típicamente necesarios.

Es posible y simple. Esto funcionó para mí

 public class SettingsActivity extends PreferenceActivity { @SuppressWarnings("deprecation") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getPreferenceManager().setSharedPreferencesName("MyPrefs"); //getPreferenceManager().setSharedPreferencesMode(MODE_WORLD_WRITEABLE); addPreferencesFromResource(R.xml.preferences); } } 

Recomiendo usar PreferenceManager.getDefaultSharedPreferences (context) en todas partes, lo cual es lo mismo que lo que la actividad de preferencia está usando. Pero si necesitas seguir con tu configuración actual, entonces una solución hacky (pero la única que conozco) es anular getSharedPreferences para devolver lo que quieres.

 @Override public SharedPreferences getSharedPreferences(String name, int mode) { return super.getSharedPreferences("MyPrefs", mode); } 
  • Android - ¿Es mala práctica tener múltiples preferencias compartidas?
  • Cómo almacenar Hashmap en Android para que se reutilice cuando la aplicación se reinicie con las preferencias compartidas?
  • Almacenar objeto de lista de matrices en SharedPreferences
  • Cómo almacenar un valor booleano con SharedPreferences en Android?
  • Compartir preferencias o almacenamiento de archivos internos - ¿Algún problema de memoria?
  • Sharedpreference byte valor eliminado después de que la aplicación se haya eliminado mediante 'Force Stop' o el administrador de tareas
  • Cómo Android SharedPreferences guarda / almacena un objeto
  • ¿Cómo puedo ver el archivo de preferencias compartidas con Android Studio?
  • Guardar el valor del elemento seleccionado mediante la preferencia compartida
  • Artículos de preferencia e intenciones explícitas
  • ¿Cómo leer las SharedPreferences de otra aplicación (el mismo ID de usuario)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.