2011-10-09 8 views
7

Estoy usando SharedPreferences para almacenar mis datos en todos Activities dentro de mi aplicación. Tengo acceso a él de esta manera:¿Cómo forzar PreferenceActivity para tratar con mis SharedPreferences?

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

he implementado PreferenceActivity que los usuarios puedan cambiar los valores a través de él pero sucede que lee/escribe datos no MisPrefs "" Pero para:

PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

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

+1

Lea esto: http://stackoverflow.com/questions/7045417/android-custom-sharedpreferences-implementation-to-persist-to-database – aromero

Respuesta

0

puedo obtener acceso a ella como esto

Eso está bien, siempre y cuando usted no estaba planeando sobre el uso PreferenceActivity.

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

Vaya.

Además, deshágase de getApplicationContext() allí, a menos que tenga un motivo específico para usar el Application en lugar de la actividad/servicio/lo que sea. Solo use el objeto Application cuando lo necesite y sepa por qué debe hacerlo.

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

No fácilmente. 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 en una sola aplicación?

Es posible que tenga una biblioteca o componente reutilizable quieren guardar cosas en SharedPreferences, y que podría tener su propio archivo a fin de no estropear las preferencias de la aplicación host. Dicho esto, generalmente no se necesitan archivos de preferencias múltiples.

+11

'' PreferenceActivity' de getPreferenceManager() .setSharedPreferencesName() 'funciona el truco – xverges

4

Recomendaría usar PreferenceManager.getDefaultSharedPreferences (context) en todas partes, que es lo mismo que la actividad de preferencia. Pero si necesita seguir con su configuración actual, entonces una solución hacky (pero la única que conozco) es anular getSharedPreferences para devolver lo que desea.

@Override 
public SharedPreferences getSharedPreferences(String name, int mode) { 
    return super.getSharedPreferences("MyPrefs", mode); 
} 
14

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); 
    } 
} 
+0

Funcionó para mí también ... ¡gracias! – aap

+0

Esta es la respuesta correcta.Esta técnica también funciona si está utilizando un 'PreferenceFragment' –

+0

Esta debería ser la respuesta aceptada. – Jay

Cuestiones relacionadas