Almacenar info

Preferencias

Las usamos para guardar pequeñas cantidades de información.

Suelen ser datos que una aplicación debe guardar para personalizar la experiencia del usuario, por ejemplo información personal, opciones de presentación, etc.

La información es almacenada en forma clave-valor en ficheros xml, en el dispositivo móvil:

/data/data/paquetejava/shared_prefs/nombre_coleccion.xml

Ver las preferencias del emulador

Para acceder a las shared preferences del dispositivo: View → Tools Windows → → Device File Explorer

/data/data/com.pablomonteserin/shared_prefs/

com.pablomonteserin_preferences.xml

Guardar preferencias

SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("key", textoAGuardar);
editor.apply();

Si pulso el botón de retroceso volveré al menú principal, pero la información introducida estará disponible la próxima vez que ejecute la aplicación.

Recuperar preferencias

SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);
String txt = sharedPref.getString("key", "Valor por defecto");
Toast.makeText(getApplicationContext(), txt, Toast.LENGTH_LONG).show();

Ejercicio Preferencias

Hacer la siguiente interfaz visual de tal forma que cuando pulsemos en el botón Save data se guarde información en las preferencias y cuando pulsemos en el botón Show data, se muestre.

Almacenar info 1

XML de preferencias

res/xml/preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <CheckBoxPreference android:key="primero" android:title="Opción 1" android:summary="Descripción opción 1" />
    <CheckBoxPreference android:key="segundo" android:title="Opción 2" android:summary="Descripción opción 2" />
</PreferenceScreen>
public class Preference_activity extends PreferenceActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       	// setContentView(R.layout.preferencias_layout);
        addPreferencesFromResource(R.xml.preferencias_layout);
Almacenar info 2

¿Qué es un fragmento?

Es una parte de una actividad, que tiene su propio ciclo de vida, recibe sus propios eventos de entrada, y que se puede añadir o quitar dinámicamente.

Preferencias con Fragment

public class MainActivity extends AppCompatActivity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		getFragmentManager().beginTransaction()
				.replace(android.R.id.content, new PreferenciasFragment()).commit();
	}
public static class PreferenciasFragment extends PreferenceFragment {
		@Override
		public void onCreate(Bundle savedInstanceState) {
			super.onCreate(savedInstanceState);

			// Make sure default values are applied. In a real app, you would
			// want this in a shared function that is used to retrieve the
			// SharedPreferences wherever they are needed.
			PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false);
			// Load the preferences from an XML resource
			addPreferencesFromResource(R.xml.preferences);
		}
	}
}
res/xml/preferences.xml
Nos sigue sirviendo el xml de la diapositiva anterior.
build.gradle
dependencies {
	implementation "androidx.preference:preference:1.0.0-alpha3"

Ejercicio: recuperar las preferencias marcadas en la diapositiva anterior en dos textview en un nuevo Activity

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
//Dónde "primero" el atributo "key" del elemento <CheckBoxPreference> en el XML.
tv.setText(""+sp.getBoolean("primero", false));
← Como crear una lista (ItemList) en Android
Cómo usar una base de datos SQLite en Android →

Aviso Legal | Política de privacidad