2013-04-18 11 views
7

私はカスタムPreferenceScreenに取り組んでいますが、PreferenceActivityを使用して設定ページのカスタム画面を作成しました。カスタムプリファレンス画面のデータを動的に変更

以下は私の設定画面です。

enter image description here

問題: - 私は動的にダウンロードデータのバッジを変更する必要があります。 このレイアウトを実現するために、私はquestionに従った。 私はすでにその質問のすべての回答を試みましたが、1つの答えは働いていませんでした。

内部の設定であるビューを見つける方法はありますか?

@Override 
protected void onBindDialogView(View v) { 
    super.onBindDialogView(v); 
    Log.v("onBindDialogView()", v.getClass().getSimpleName()); 
} 

あなたBadgedPreference場合:ちょうどあなたのパッケージとクラス<com.example.app.BadgedPreference...>を含めるように<Preference...>からXMLを変更することを忘れないでください - あなたはonBindDialogView()をオーバーライドし、Preferenceをサブクラス化することができます

のsettings.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

<Preference android:title="@string/settings_user_profile" android:key="user_profile" android:summary="@string/settings_user_profile_desc" android:layout="@layout/setting_list"></Preference> 
<Preference android:title="@string/settings_download" android:key="download_data" android:summary="@string/settings_download_desc" android:layout="@layout/setting_list"></Preference> 
</PreferenceScreen> 
+0

あなたの設定xmlファイルのコードは、その質問を見て、私のコードは、その質問と同じです... – Pratik

+0

チェック更新質問を投稿し.... –

+1

をあなたの代わりに好み – stinepike

答えて

4

あなたの変更を処理する方法があります。少しでも簡単に使用できます -から:

さらに簡単に、あなただけの、あなたが含ま集計フィールドを使用して値を設定することができ、「バッジ」としてその集計フィールドのスタイルを、標準 Preferenceを使用することができます
PreferenceScreen myPrefScreen = (PreferenceScreen)getPreferenceScreen(); 
BadgedPreference bp = (BadgedPreference)myPrefScreen.findPreference("download_data"); 
// Custom method 
bp.setBadgeValue(12); 

Preference pref = (Preference)myPrefScreen.findPreference("download_data"); 
pref.setSummary("12"); 

ご質問がある場合はお知らせください。あなたが標準のプリファレンスを使用した場合

@Override 
    public void onResume() { 
     super.onResume(); 

     // Set up a listener whenever a key changes 
     getPreferenceScreen().getSharedPreferences() 
     .registerOnSharedPreferenceChangeListener(this);   
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 

     // Unregister the listener whenever a key changes 
     getPreferenceScreen().getSharedPreferences() 
     .unregisterOnSharedPreferenceChangeListener(this); 
    } 

    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
     String key) { 

     //update summary 
     updatePrefsSummary(sharedPreferences, findPreference(key)); 
    } 

は、あなたがこのような何かを試すことができます:

+0

ありがとう、私はPreferenceクラスを使っていました.. –

+0

ありがとう、あなたはそれがうまくいった。 :) – CodeShane

0

あなたはこのようなOnSharedPreferenceChangeListener 何かを実装することができます

/** 
* Update summary 
* 
* @param sharedPreferences 
* @param pref 
*/ 
protected void updatePrefsSummary(SharedPreferences sharedPreferences, 
    Preference pref) { 

if (pref == null) 
    return; 

if (pref instanceof ListPreference) { 
    // List Preference 
    ListPreference listPref = (ListPreference) pref; 
    listPref.setSummary(listPref.getEntry()); 

} else if (pref instanceof EditTextPreference) { 
    // EditPreference 
    EditTextPreference editTextPref = (EditTextPreference) pref; 
    editTextPref.setSummary(editTextPref.getText()); 

} else if (pref instanceof MultiSelectListPreference) { 
    // MultiSelectList Preference 
    MultiSelectListPreference mlistPref = (MultiSelectListPreference) pref; 
    String summaryMListPref = ""; 
    String and = ""; 

    // Retrieve values 
    Set<String> values = mlistPref.getValues(); 
    for (String value : values) { 
     // For each value retrieve index 
     int index = mlistPref.findIndexOfValue(value); 
     // Retrieve entry from index 
     CharSequence mEntry = index >= 0 
       && mlistPref.getEntries() != null ? mlistPref 
       .getEntries()[index] : null; 
     if (mEntry != null) { 
      // add summary 
      summaryMListPref = summaryMListPref + and + mEntry; 
      and = ";"; 
     } 
    } 
    // set summary 
    mlistPref.setSummary(summaryMListPref); 

} else if (pref instanceof RingtonePreference) { 
    // RingtonePreference 
    RingtonePreference rtPref = (RingtonePreference) pref; 
    String uri; 
    if (rtPref != null) { 
     uri = sharedPreferences.getString(rtPref.getKey(), null); 
     if (uri != null) { 
      Ringtone ringtone = RingtoneManager.getRingtone(
        getActivity(), Uri.parse(uri)); 
       pref.setSummary(ringtone.getTitle(getActivity())); 
     } 
    } 

} 

}

カスタム設定を使用する場合は、すべてを行うことができ、setSummary(int値)をオーバーライドすることができます

@Override 
public void setSummary(int value) { 
    setSummary(String.valueOf(value)+" ...."); 
}