2011-07-15 16 views
5

tamam butonuna tıkladığınızda EditTextPreference mevcut özetini nasıl güncelleneceği. Şimdi, Edit Text (Metin Düzenle) kutusuna yeni bir değer girdiğimde onu güncellemek istiyorum ve Tamam'a tıkladığınızda, özetin değerini güncellemeliydi. Ama bunu yapamam. Kodumun altında lütfen gerekli olan kodumda güncellenir.i varsayılan özeti ile EditTextPreference göstermek mümkün duyuyorum

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

xml dosyası özeti metin olarak değeri girmek

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

aslında benim kod güncelleme önceki olduğunu. Tamam düğmesini tıkladığımda nasıl özet metin gösterilir. Teşekkür

+0

SO serbest kodlama hizmeti değildir görüyoruz. Lütfen [tanıtım turunu] yapın (http://www.stackoverflow.com/tour). [İyi bir soru nasıl sorabilirim] (http://stackoverflow.com/help/how-to-ask) 'ı okumak isteyebilirsiniz, bu da yararlı bir yanıt alma olasılığını artıracaktır _drastically_. [ESR] 'i (https://en.m.wikipedia.org/wiki/Eric_S._Raymond)' nin mükemmel makalesini bulabilirsiniz. [Akıllı Yolu Soru Sorma] (http://catb.org/~esr/ faqs/smart-questions.html) yardımcı olur. –

cevap

14

Bunu uygulayabilir . senin xml olarak

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

, Şimdi com.example.yourapplication.FriendlyEditTextPreference

Eğer android:summary olarak dizeyi içeren "% s" veya "% 1 $ s" kullanabilir ve bunu otomatik olarak güncellenir ile EditTextPreference yerine; dahası, andorid:hint'u ayarlayabilirsiniz, böylece metin boşken ipucu da görüntülenir. Tüm platformlarda bir çalışma ListPreference için

, benim answer of this uestion

+1

% s'nin EditTextPreference ile çalışması gerekiyor mu? Onu işe alamadım. – lostintranslation

+1

@Iostintranslation% s çerçevede ListPreferencce ile çalışacak, ancak yukarıdaki özelleştirme ile EditTextPreference ile kullanabilirsiniz. –

İlgili konular