studio sirve que preferencia para how create code archivos android android-preferences

android - sirve - shared preferences flutter



ConfiguraciĆ³n del campo de Resumen de preferencias de UI al valor de la preferencia (3)

Como novedad en Android, tengo algo de código cuando el usuario cambia una preferencia. Actualizo el campo Resumen en la preferencia de UI para que sea el valor que ingresaron. Sin embargo, cuando se crea la actividad de preferencias, me gustaría establecer que los campos de Resumen sean los valores en las preferencias correspondientes. Por favor avise. Gracias.

public class MyPreferenceActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preference); SharedPreferences sp = getPreferenceScreen().getSharedPreferences(); sp.registerOnSharedPreferenceChangeListener(this); } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Preference pref = findPreference(key); if (pref instanceof EditTextPreference) { EditTextPreference etp = (EditTextPreference) pref; pref.setSummary(etp.getText()); } } }


Esto funcionó para mí.

public class PrefsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { private Preference pref; private String summaryStr; String prefixStr; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.prefs); SharedPreferences sharedPref = getPreferenceScreen().getSharedPreferences(); sharedPref.registerOnSharedPreferenceChangeListener(this); } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { //Get the current summary pref = findPreference(key); summaryStr = (String)pref.getSummary(); //Get the user input data prefixStr = sharedPreferences.getString(key, ""); //Update the summary with user input data pref.setSummary(summaryStr.concat(": [").concat(prefixStr).concat("]")); } }


Lo que suelo hacer es:
1 - Cree una nueva clase que amplíe el tipo de preferencia que necesito mostrar (1 por tipo de preferencia) 2 - Dentro de su código, haga el trabajo apropiado para mostrar el resumen actualizado
3 - Consulte esta clase en el archivo res / xml / preferences.xml

Déjame darte un pequeño ejemplo, bueno para un EditTextPreference:

CLS_Prefs_Edit.java

/** * CLS_Prefs_Edit class * * This is the class that allows for a custom EditTextPrefence * (auto refresh summary). * * @category Custom Preference * @author Luca Crisi ([email protected]) * @copyright Luca Crisi * @version 1.0 */ package com.your_name.your_app; /* -------------------------------- Imports --------------------------------- */ import android.content.Context; import android.preference.EditTextPreference; import android.util.AttributeSet; public final class CLS_Prefs_Edit extends EditTextPreference { /* ---------------------------- Constructors ---------------------------- */ public CLS_Prefs_Edit(final Context ctx, final AttributeSet attrs) { super(ctx, attrs); } public CLS_Prefs_Edit(final Context ctx) { super(ctx); } /* ----------------------------- Overrides ------------------------------ */ @Override public void setText(final String value) { super.setText(value); setSummary(getText()); } }

res / xml / preferences.xml

<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory android:title="@string/pref_phone_cat"> <!-- NORMAL EditTextPreference, NO summary update --> <!-- <EditTextPreference --> <!-- android:widgetLayout="@layout/arr_dn" --> <!-- android:key="phone" --> <!-- android:title="@string/pref_phone_title" --> <!-- android:summary="@string/pref_phone_summ" --> <!-- android:defaultValue="" --> <!-- android:inputType="phone" --> <!-- android:digits="+1234567890" --> <!-- /> --> <!-- MY EditTextPreference, WITH summary update --> <com.your_name.your_app.CLS_Prefs_Edit android:widgetLayout="@layout/arr_dn" android:key="phone" android:title="@string/pref_phone_title" android:summary="@string/pref_phone_summ" android:defaultValue="" android:inputType="phone" android:digits="+1234567890" /> </PreferenceCategory> </PreferenceScreen>

Por supuesto, establece tus cadenas en / res / valores / cadenas, y listo.

Tenga en cuenta que esta solución funciona tanto para PreferenceFragments como para PreferenceActivities .
Lo estoy usando para una aplicación que se ejecuta en 2.2 Froyo (mostrando una Actividad de Preferencia) así como en 4.4 KitKat (mostrando un PreferenceFragment)

Espero que ayude.


Soy nuevo también, así que puede que no sea el mejor código, pero esto es similar a lo que estoy haciendo. Probablemente desee registrar su escucha en Reanudar y anular el registro en Pausa en lugar de en Crear. Espero que esto ayude.

Principalmente, solo necesita tomar el pref, el valor pref y establecer el resumen.

public class MyPreferenceActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preference); SharedPreferences sp = getPreferenceScreen().getSharedPreferences(); EditTextPreference editTextPref = (EditTextPreference) findPreference("thePrefKey"); editTextPref .setSummary(sp.getString("thePrefKey", "Some Default Text")); } protected void onResume() { super.onResume(); getPreferenceScreen().getSharedPreferences() .registerOnSharedPreferenceChangeListener(this); } protected void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences() .unregisterOnSharedPreferenceChangeListener(this); } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Preference pref = findPreference(key); if (pref instanceof EditTextPreference) { EditTextPreference etp = (EditTextPreference) pref; pref.setSummary(etp.getText()); } } }