Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
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.
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);
¿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));