2011-07-15 19 views
5

Puedo mostrar EditTextPreference con el resumen predeterminado. Ahora quiero actualizarlo cuando ingrese un nuevo valor en el cuadro Editar texto y hago clic en Aceptar, luego debe cambiar el valor del resumen. Pero no puedo hacer eso. Mi código está debajo, por favor actualice en mi código que requiera.cómo actualizar el resumen existente de EditTextPreference cuando hago clic en el botón Aceptar

public class Prefs extends PreferenceActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.prefs); 

    final EditTextPreference pref = (EditTextPreference)findPreference("username"); 
    pref.setSummary(pref.getText()); 
    pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
     public boolean onPreferenceChange(Preference preference, Object newValue) { 
     final EditTextPreference pref = (EditTextPreference)findPreference("username"); 

     pref.setSummary(pref.getText()); 

     return true; 
     } 
    }); 
    } 
} 

archivo XML es

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <EditTextPreference 
    android:title="User Name" 
    android:key="username" 
    android:summary="Please provide user name" /> 
    <EditTextPreference 
    android:title="Password" 
    android:password="true" 
    android:key="password" 
    android:summary="Please enter your password" /> 
</PreferenceScreen> 

realidad mi actualización de código anterior incorpore el valor como texto resumen. Cómo mostrar texto como resumen cuando hago clic en el botón Aceptar. Gracias

+0

por lo que no es un servicio de codificación libre. Por favor, tome el [recorrido introductorio] (http://www.stackoverflow.com/tour). Es posible que desee leer [Cómo hago una buena pregunta] (http://stackoverflow.com/help/how-to-ask), que aumenta la probabilidad de obtener una respuesta útil _drásticamente_. Puede encontrar el excelente ensayo de [ESR] (https://en.m.wikipedia.org/wiki/Eric_S._Raymond) [Cómo hacer preguntas, la forma inteligente] (http://catb.org/~esr/ faqs/smart-questions.html) útiles. –

Respuesta

14

se puede implementar esta simplemente subclasificando EditTextPreference y primordial getSummary() .

package com.example.yourapplication; 

import android.content.Context; 
import android.preference.EditTextPreference; 
import android.text.TextUtils; 
import android.util.AttributeSet; 

public class FriendlyEditTextPreference extends EditTextPreference { 

    public FriendlyEditTextPreference(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public FriendlyEditTextPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public FriendlyEditTextPreference(Context context) { 
     super(context); 
    } 

    // According to ListPreference implementation 
    @Override 
    public CharSequence getSummary() { 
     String text = getText(); 
     if (TextUtils.isEmpty(text)) { 
      CharSequence hint = getEditText().getHint(); 
      if (!TextUtils.isEmpty(hint)) { 
       return hint; 
      } else { 
       return super.getSummary(); 
      } 
     } else { 
      CharSequence summary = super.getSummary(); 
      if (!TextUtils.isEmpty(summary)) { 
       return String.format(summary.toString(), text); 
      } else { 
       return summary; 
      } 
     } 
    } 
} 

En el código XML, reemplace EditTextPreference con com.example.yourapplication.FriendlyEditTextPreference

Ahora puede utilizar cadena que contiene "% s" o "% 1 $ s" como android:summary y se actualizará de forma automática; además, puede establecer andorid:hint para que la sugerencia también se muestre cuando el texto está vacío.

para un ListPreference trabajar en todas las plataformas, ver mi answer of this uestion

+1

Se supone que% s funciona con w/EditTextPreference? No pude arreglarlo. – lostintranslation

+1

@Iostintranslation% s se supone que funciona con ListPreference en el marco, pero con la personalización anterior, puede usarlo con EditTextPreference. –

Cuestiones relacionadas