2011-07-15 7 views
5

Jestem w stanie wyświetlić EditTextPreference z domyślnym podsumowaniem. Teraz chcę go zaktualizować, gdy wprowadzę nową wartość w polu Edytuj tekst i kliknę przycisk OK, a następnie należy podnieść wartość podsumowania. Ale nie jestem w stanie tego zrobić. Mój kod jest poniżej, proszę zaktualizować w moim kodzie, który jest wymagany.jak zaktualizować istniejące podsumowanie EditTextPreference po kliknięciu przycisku OK

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; 
     } 
    }); 
    } 
} 

plik xml jest

<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> 

faktycznie moja zmiana kodu poprzedni wprowadzić jako wartość podsumowania tekstu. Jak wyświetlić tekst jako podsumowanie po kliknięciu przycisku OK. Dzięki

+0

SO nie jest to darmowa usługa kodowania. Proszę wziąć [wstępne zwiedzanie] (http://www.stackoverflow.com/tour). Możesz przeczytać [Jak zadać dobre pytanie] (http://stackoverflow.com/help/how-to-ask), co zwiększa prawdopodobieństwo otrzymania użytecznej odpowiedzi _drastycznie_. Możesz znaleźć wspaniały esej [ESR] (https://en.m.wikipedia.org/wiki/Eric_S._Raymond) [How To Ask Questions The Smart Way] (http://catb.org/~esr/ faqs/smart-questions.html). –

Odpowiedz

14

można zaimplementować to po prostu przez instacji EditTextPreference i przesłanianie 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; 
      } 
     } 
    } 
} 

W swojej xml, wymienić EditTextPreference z com.example.yourapplication.FriendlyEditTextPreference

teraz można używać ciąg zawierający "% s" lub "% 1 $ s" jak android:summary i będzie aktualizować się automatycznie; ponadto można ustawić andorid:hint, tak aby wskazówka była wyświetlana również wtedy, gdy tekst jest pusty.

Dla sprawnego ListPreference na wszystkich platformach, zobacz moje answer of this uestion

+1

Czy% s ma działać w/EditTextPreference? Nie mogłem go uruchomić. – lostintranslation

+1

@Istintranslation% s ma działać z ListPreferencce w strukturze, ale z powyższym dostosowaniem możesz użyć go z EditTextPreference. –

Powiązane problemy