2011-07-15 53 views
5

我能夠顯示具有默認摘要的EditTextPreference。現在我想更新它,當我在編輯文本框中輸入新的值,然後單擊確定,然後它應該更新摘要的值。但我無法做到這一點。我的代碼如下,請在需要的代碼中更新。如何更新EditTextPreference現有摘要,當我單擊確定按鈕

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

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

其實我的代碼更新以前的輸入值摘要文本。當我單擊確定按鈕時如何顯示文本摘要。由於

+0

等都不是免費的編碼服務。請參加[介紹性旅遊](http://www.stackoverflow.com/tour)。您可能想閱讀[我如何提出一個好問題](http://stackoverflow.com/help/how-to-ask),這會增加獲得有用答案的可能性_drastically_。你可能會發現[ESR](https://en.m.wikipedia.org/wiki/Eric_S._Raymond)的優秀論文[如何提問智能方式](http://catb.org/~esr/) faqs/smart-questions.html)很有幫助。 –

回答

14

您可以實現此。

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

在你的XML,與com.example.yourapplication.FriendlyEditTextPreference

現在你可以使用包含字符串 「%s」 或 「%1 $ S」 爲android:summary,它會自動更新替換EditTextPreference;此外,您可以設置andorid:hint,以便在文本爲空時也顯示提示。

所有平臺上的工作ListPreference,看到我answer of this uestion

+1

是%s應該工作W/EditTextPreference?我無法讓它工作。 – lostintranslation

+1

@Intintranslation%s應該與ListPreferencce在框架中一起工作,但通過上面的自定義,您可以將它與EditTextPreference一起使用。 –