2011-07-15 5 views
5

私はEditTextPreferenceをデフォルトの要約で表示することができます。今私は新しい値を編集テキストボックスに入力し、[OK]をクリックしてそれを更新したい場合は、それは要約の値をupadateする必要があります。しかし、私はそれをすることができません。私のコードは以下の通りです。okボタンをクリックすると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> 

実際に私のコードの更新は、前です。 [OK]ボタンをクリックすると、要約としてテキストを表示する方法。おかげ

+0

はSO無料コーディングサービスではありません参照してください。 [紹介ツアー](http://www.stackoverflow.com/tour)をご覧ください。 [良い質問をするにはどうすればいいですか](http://stackoverflow.com/help/how-to-ask)を読んでみてください。有用な答えを得る確率が高まります。 [ESR](https://en.m.wikipedia.org/wiki/Eric_S._Raymond)の優れたエッセイ[スマートウェイの質問方法](http://catb.org/~esr/ faqs/smart-questions.html)が役立ちます。 –

答えて

14

あなたは、単にEditTextPreferenceをサブクラス化し、getSummary()をオーバーライドすることでこれを実装することができます。あなたのXMLで

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

、今あなたがandroid:summaryとして "%sの" または "%1 $ s" を含む文字列を使用することができますし、それが自動的に更新されますcom.example.yourapplication.FriendlyEditTextPreference

EditTextPreferenceを置き換えます。また、andorid:hintを設定すると、テキストが空の場合にヒントも表示されます。すべてのプラットフォーム上で作業しListPreferenceについては

、私のanswer of this uestion

+1

%sはEditTextPreferenceで動作するはずですか?私はそれを働かせることができませんでした。 – lostintranslation

+1

@Iostintranslation%sはフレームワークのListPreferencceで動作するはずですが、上記のカスタマイズではEditTextPreferenceで使用できます。 –

関連する問題