2014-09-30 50 views
3

當我試圖設置摘要時,用戶選擇一個首選項,它通常保存。但是當我的應用程序重新啓動時,摘要消失了。設置摘要來描述當前值

這裏是我的代碼來設置ListPreferenceEditTextPreference摘要:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key){ 

    Preference pref = findPreference(key); 

    // I feel the problem is happened here 
    if (pref instanceof ListPreference) { 
     ListPreference listPref = (ListPreference) pref; 
     pref.setSummary(listPref.getEntry()); 
    } 
    // Same problem here 
    if (pref instanceof EditTextPreference) { 
     EditTextPreference editText = (EditTextPreference) pref; 
     pref.setSummary(editText.getEntry().toString()); 
    } 
} 

有什麼錯嗎?

+3

你應該設置,即使在OnCreate中 – nandeesh 2014-09-30 07:28:03

+1

什麼參數的總結?此參數[SharedPreferences sharedPreferences,String key]與Preference pref = findPreference(key)關聯。在onCreate中,此參數(字符串鍵)不可用。 – 2014-09-30 07:47:33

+1

如果不是,則在xml中添加android:key – nandeesh 2014-09-30 07:59:15

回答

2
ListPreference listPref = (ListPreference) findPreference("listkey"); 
listPref.setSummary(listPref.getEntry()); 

EditTextPreference editText = (EditTextPreference) findPreference("edittextkey"); 
editText.setSummary(editText.getEntry().toString()); 

如果你有那麼關鍵設置摘要像上面,在OnCreate中在preferenceFragment或活動addpreferences後

26

,如果你只是想顯示當前條目,嘗試設置彙總在XML :

android:summary="%s" 

這僅適用於在ListPreference(見Doc):

如果摘要在其中包含一個字符串格式化標記(即, 「%s」或「%1 $ s」),那麼當前的輸入值將替換它的位置。

+1

美麗,謝謝。 – 2015-12-07 17:14:46

+4

無法使其適用於EditTextPreference。 – lostintranslation 2015-12-15 15:13:07

+1

這隻適用於ListPreference – FreshD 2015-12-15 15:25:52

5

問題可能是the listener未在啓動時調用(值未​​更改)。但是您可以在XML中動態地設置摘要。對於ListPreference,這是內置的,@FreshD's answer是要走的路。擴展到f.ex.一個EditTextPreference,你需要創建你自己的類。 For example

package your.package; 

import android.content.Context; 
import android.util.AttributeSet; 

public class EditTextPreference extends android.preference.EditTextPreference{ 
     public EditTextPreference(Context context, AttributeSet attrs, int defStyle) { 
      super(context, attrs, defStyle); 
     } 

     public EditTextPreference(Context context, AttributeSet attrs) { 
      super(context, attrs); 
     } 

     public EditTextPreference(Context context) { 
      super(context); 
     } 

     @Override 
     public CharSequence getSummary() { 
      String summary = super.getSummary().toString(); 
      return String.format(summary, getText()); 
     } 
    } 

而在你的XML使用:

<your.package.EditTextPreference 
       android:key="pref_alpha" 
       android:summary="Actual value: %s" 
       android:title="Title" 
       android:defaultValue="default" 
       />