Pregunta

Estoy utilizando un PreferenceActivity para mostrar algunos ajustes para mi aplicación. Estoy inflando los ajustes a través de un archivo XML para que mi onCreate (y métodos de clase completas) es similar al siguiente:

public class FooActivity extends PreferenceActivity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        addPreferencesFromResource(R.xml.preference);
    }
}

El javadoc de PreferenceActivity PreferenceFragment estados que

  

Estas preferencias se guardará automáticamente a SharedPreferences como el usuario interactúa con ellos. Para recuperar una instancia de SharedPreferences que la jerarquía de preferencia en esta actividad va a utilizar, getDefaultSharedPreferences de llamada (android.content.Context) con un contexto en el mismo paquete que esta actividad.

Pero, ¿cómo puedo obtener el nombre del SharedPreference en otra actividad? Sólo puedo llamar

getSharedPreferences(name, mode)

en la otra actividad, pero necesito el nombre de la SharedPreference que fue utilizado por el PreferenceActivity. ¿Cuál es el nombre o cómo puedo recuperarlo?

¿Fue útil?

Solución

import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);

Actualizar

De acuerdo con Compartidos | Desarrollador Android Tutorial (parte 13) por Sai Gita M N,

  

Muchas aplicaciones puede proporcionar una manera de preferencias de captura de usuario en el   la configuración de una aplicación específica o una actividad. para apoyar   esto, Android proporciona un simple conjunto de APIs.

     

Preferencias son típicamente nombrar pares de valores. Ellos se pueden almacenar como   “Preferencias” compartidas a través de varias actividades en una aplicación (nota   Actualmente no se puede compartir entre procesos). O puede ser   algo que necesita ser almacenado a una actividad específica.

  1. Preferencias compartidas:. Las preferencias compartidas pueden ser utilizadas por todos los componentes (actividades, servicios, etc) de las aplicaciones

  2. preferencias Actividad manejado:. Estas preferencias sólo se pueden utilizar dentro de la actividad particular y no pueden ser utilizados por otros componentes de la aplicación

Preferencias compartidas:

Las preferencias compartidas son gestionados con la ayuda del método de la clase getSharedPreferences Context. Las preferencias se almacenan en un archivo por defecto (1) o puede especificar un nombre de archivo (2) que se utilizará para referirse a las preferencias.

(1) La forma recomendada es utilizar el modo por defecto, sin especificar el nombre de archivo

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

(2) Así es como se obtiene la instancia cuando se especifica el nombre del archivo

public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE es el modo de funcionamiento de las preferencias. Es el modo por defecto y significa que el archivo creado se accede sólo por la aplicación de llamada. Otros dos modos soportados son MODE_WORLD_READABLE y MODE_WORLD_WRITEABLE. En MODE_WORLD_READABLE otra aplicación puede leer el archivo creado, pero no puede modificarlo. En caso de MODE_WORLD_WRITEABLE otras aplicaciones también tienen permisos de escritura para el archivo creado.

Por último, una vez que tenga la instancia preferencias, aquí es cómo puede recuperar los valores almacenados de las preferencias:

int storedPreference = preferences.getInt("storedInt", 0);

Para los valores tienda en el objeto SharedPreference.Editor archivo de preferencias tiene que ser utilizado. Editor es una interfaz anidada en la clase SharedPreference.

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Editor también es compatible con métodos como remove() y clear() suprimir los valores de preferencia del archivo.

Preferencias Actividad:

Las preferencias compartidas puede ser utilizado por otros componentes de la aplicación. Pero si no es necesario compartir las preferencias con otros componentes y quieren tener preferencias particulares de actividad que puede hacer que con la ayuda del método de getPreferences() de la actividad. El método utiliza el método getPreference getSharedPreferences() con el nombre de la clase de actividad para el nombre de archivo de preferencias.

A continuación se muestra el código para obtener preferencias

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

El código para almacenar valores es también el mismo que en el caso de las preferencias compartidas.

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

También puede utilizar otros métodos, como el almacenamiento del estado de actividad en la base de datos. Nota Android también contiene un paquete llamado android.preference. Las clases define los paquetes para implementar preferencias de la aplicación de interfaz de usuario.

Para ver algunos ejemplos más cheque de Android almacenamiento de datos mensaje el sitio de desarrolladores.

Otros consejos

Si usted no tiene acceso a getDefaultSharedPreferenes(), puede utilizar getSharedPreferences(name, mode) en cambio, sólo hay que pasar el nombre correcto.

Android crea este nombre (posiblemente basado en el nombre del paquete de su proyecto?). Se puede conseguir poniendo el siguiente código en un SettingsActivity onCreate(), y ver lo que es preferencesName.

String preferencesName = this.getPreferenceManager().getSharedPreferencesName();

La cadena debe ser algo como com.example.projectname_preferences. código duro que en algún lugar de su proyecto, y pasarlo a getSharedPreferences() y usted debe ser bueno para ir.

Declarar estos métodos primero ..

public static void putPref(String key, String value, Context context) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(key, value);
    editor.commit();
}

public static String getPref(String key, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(key, null);
}

A continuación, llamar a esto cuando se quiere poner un pref:

putPref("myKey", "mystring", getApplicationContext());

llamar a esto cuando se desea obtener una pref:

getPref("myKey", getApplicationContext());

o usted puede utilizar este objeto https: //github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo todo lo que simplifica aún más

Ejemplo:

TinyDB tinydb = new TinyDB(context);

tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);

tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true); 

tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);

tener que pasar por todas partes contexto es realmente me molesta. el código se vuelve demasiado prolijo y difícil de manejar. Lo hago en cada proyecto en lugar ...

public class global {
    public static Activity globalContext = null;

y la puso en la actividad principal de crear

@Override
public void onCreate(Bundle savedInstanceState) {
    Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
            global.sdcardPath,
            ""));
    super.onCreate(savedInstanceState);

    //Start 
    //Debug.startMethodTracing("appname.Trace1");

    global.globalContext = this;

nadie también todas las claves de preferencia debe ser independiente del lenguaje, me ha impactado ha mencionado.

getText(R.string.yourPrefKeyName).toString()

Ahora llamar de manera muy simple como esto en una línea de código

global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);

Si usted tiene una casilla de verificación y que le gustaría a buscar a su valor es decir, verdadero / falso en cualquier archivo Java -

Uso -

Context mContext;
boolean checkFlag;

checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`

Actualización 2019

Usted simplemente puede usar la biblioteca PowerPreference

https://github.com/AliEsaAssadi/Android-Power-Preference

Cómo instancia preferencia compartida

Para obtener la instancia predeterminada sólo tiene que llamar

PowerPreference.getDefaultFile()

O si desea un archivo específico preferencia

PowerPreference.getFileByName(fileName)

escritura de datos:

PowerPreference.getDefaultFile().put(key,value)

Obtención de datos

PowerPreference.getDefaultFile().getString(key,value)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top