¿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); } 
  • Preferencias compartidas entre dos procesos de la misma aplicación
  • Agregar preferencias dinámicas de la casilla de verificación en Android y mostrarlas en la pantalla de preferencias?
  • ¿Se eliminan las preferencias compartidas asociadas con la aplicación cuando se quita la aplicación?
  • Android SharedPreferences, cómo guardar una variable int simple
  • Uso del editor de preferencias compartidas
  • Cómo pasar el contexto de la aplicación dentro Singleton y SharedPreferences Clases
  • OnSharedPreferenceChanged no se dispara si se produce un cambio en una actividad independiente?
  • ¿Cuándo se aplicarán SharedPreferences () y commit ()?
  • Android - ¿Cómo usar SharedPreferences en la clase non-Activity?
  • Guardar el estado cuando se pulsa el botón Atrás
  • Android SharedPreferences Conjunto de cadenas: algunos elementos se quitan después de reiniciar la aplicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.