Almacenar info

Curso de Android

Contactar con el profesor

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


public class Almacenamiento_Pref_Activity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
		String txt = sp.getString("texto", "valor por defecto");
		Toast.makeText(getApplicationContext(), txt, Toast.LENGTH_LONG).show();
	}
	
	//El siguiente código se ejecuta cuando la aplicación está a punto de terminar
	@Override 
	protected void onPause() {
		super.onPause();
		EditText et = findViewById(R.id.editText);
		SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
		SharedPreferences.Editor sharedPreferencesEditor = sp.edit();
		sharedPreferencesEditor.putString("texto", et.getText().toString());
		sharedPreferencesEditor.commit();
	}

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.

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 1

¿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));
← ItemList
SQLite →

Aviso Legal | Política de privacidad