Cómo establecer el resumen de preferencias edittext y hacer que se pegue

He vuelto y cuarto en esto y no puedo conseguirlo. Estoy configurando mis ajustes usando un fragmento de preferencia. Puedo obtener la configuración para trabajar y puedo incluso obtener el "resumen" para actualizar cuando hago el cambio. Pero si dejo la pantalla de ajustes y vuelvo a ella, el resumen está de vuelta al texto predeterminado. Así que la pregunta es, cuando se utiliza una preferencia edittext. ¿Cómo actualizar el resumen para que muestre lo que el usuario cambió la configuración y hacer que se adhieren a través de cerrar la pantalla y la aplicación? En este caso cuando mis usuarios cambian el mse_ip el resumen cambia a "MSE IP xxxx" pero tan pronto como salgo de la pantalla de ajustes y vuelvo está de vuelta a "0.0.0.0" que es lo que @ string / mseip está configurado.

Preferences.xml

<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <EditTextPreference android:key="mse_ip" android:title="MSE IP" android:summary="@string/mseip" android:defaultValue="0.0.0.0" android:dialogTitle="IP Address for mse" /> <EditTextPreference android:key="mse_username" android:title="Username" android:summary="MSE Username %s" android:defaultValue="Admin" android:dialogTitle="Username for mse" /> <EditTextPreference android:key="mse_password" android:title="MSE Password" android:password="true" android:summary="******" android:defaultValue="Admin" android:dialogTitle="Password for mse" /> </PreferenceScreen> 

Fragmento de preferencias

 package com.hmkcode.android; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceFragment; /*public class PrefsFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.preferences); } } */ public class PrefsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.preferences); // set texts correctly onSharedPreferenceChanged(null, ""); } @Override public void onResume() { super.onResume(); // Set up a listener whenever a key changes getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } @Override public void onPause() { super.onPause(); // Set up a listener whenever a key changes getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { updatePreference(key); } private void updatePreference(String key){ if (key.equals("mse_ip")){ Preference preference = findPreference(key); if (preference instanceof EditTextPreference){ EditTextPreference editTextPreference = (EditTextPreference)preference; if (editTextPreference.getText().trim().length() > 0){ editTextPreference.setSummary("MSE IP " + editTextPreference.getText()); }else{ editTextPreference.setSummary("MSE IP Not"); } } } } } 

Setpreferenceactividad

 import android.os.Bundle; import android.app.Activity; public class SetPreferenceActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit(); //setContentView(R.layout.activity_set_preference); } } 

Debe establecer un OnPreferenceChangeListener a su preferencia. Así que en cada cambio de preferencia, llamando a setSummary, cambia la pantalla de resumen. Esto podría ser un código de ejemplo:

 final Preference pref = getPreferenceManager().findPreference( PREF_KEY); pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { pref.setSummary(newValue.toString()); return true; } }); 

También debe llamar al método setSummary de su preferencia en onCreate (), de modo que Summary muestre su valor sharedPreference.

Parece que acaba de actualizar el valor de ese EditText. Intente almacenar el nuevo valor en las preferencias compartidas llamando al

sharedPreferences.edit().putString(key, editTextPreference.getText()).apply();

Esto se puede llamar en la función updatePreference(String key) .

  • Android: ¿Cómo puedo guardar, borrar y restaurar SharedPreferences para la prueba de unidades?
  • ¿Es seguro guardar los tokens de acceso / actualización de Oauth2 en las Preferencias compartidas de Android?
  • Mailto de preferencias xml posible?
  • Establecer indicadores de intención para PreferenceScreen en xml
  • Extras en el intento de correo electrónico - Preferencias XML
  • Preferencias anidadas.xml
  • Almacenar cookie en las preferencias compartidas
  • Pantalla de Preferencias de Android sin XML
  • Utilizar una subclase personalizada de SharedPreferences con PreferenceActivity o PreferenceFragment
  • DefaultValue de archivo de preferencia de xml no está almacenado - ¿por qué?
  • Cómo establecer el valor predeterminado de un ListPreference
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.