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
- Uso de la preferencia de lista en Android
- Preferencias de Android: Valores predeterminados incorrectos DESPITE "setDefaultValues"
- Instanciar una clase interna (Preferencia) en un archivo xml
- Cómo hacer que un cuadro de diálogo de PreferenciaActividad abra una ventana de diálogo para establecer una preferencia personalizada
- Cómo utilizar PreferenceFragment?
<?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); } }
- Preferencias con ActionBar Sherlock
- Actualizar el elemento de preferencia existente en una PreferenciaActividad al regresar de una (sub) PreferenciaScreen
- Obtener SharedPreferences de un servicio
- Respondiendo a las actualizaciones de preferencias en Android
- Archivo de preferencias del usuario vs Archivo de preferencias de la aplicación
- ¿cómo puedo establecer el valor marcado en ListPreference
- Crear preferencia de diseño mediante programación
- ¿Cómo puedo mostrar un Diálogo de un PreferenceFragment?
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)
.
- ¿Cómo hacer el FAB evitar ser movido en ViewPager, sin embargo, ser una parte del fragmento dentro?
- ¿Cómo heredar de MonkeyDevice?