2011-07-12 66 views
2

我有ListPreference,但是當我點擊一個項目時,該值不會更新。 getValue()總是返回相同的東西。ListPreference的值永遠不會更新

當我重新點擊ListPreference時,值不幸的是沒有改變。

我的代碼:

 ListPreference lp7 = (ListPreference) findPreference("paramUpdate"); 
     lp7.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

     public boolean onPreferenceChange(Preference preference, Object newValue) { 
      ListPreference listPref = (ListPreference) preference; 
     listPref.getValue(); 
      return false; 
     } 
    }); 

首XML:

<ListPreference android:key="paramUpdate" 
      android:title="@string/paramUpdate" 
      android:summary="@string/paramSummaryUpdate" 
      android:entries="@array/update" 
      android:entryValues="@array/updateValues" 
      /> 

值:

<string-array name="update"> 
    <item>24h</item> 
    <item>48h</item> 
    <item>72h</item> 
    <item>@string/never</item> 
</string-array> 

<string-array name="updateValues"> 
    <item>24</item> 
    <item>48</item> 
    <item>72</item> 
    <item>0</item> 
</string-array> 

我哪裏錯了?

回答

10

您必須從onPreferenceChangeListener中返回true以供系統存儲新值。請參閱docs以供參考。

+1

請注意,OnPreferenceChangeListener方法onPreferenceChange還爲您提供了newValue - > public abstract boolean onPreferenceChange(首選首選項,對象newValue) –

2

一些矯正,如果你想保存優先值:

public boolean onPreferenceChange(Preference preference, Object newValue) { 
     ListPreference listPref = (ListPreference) preference; 
     int index = listPref.findIndexOfValue((String) newValue); 

     SharedPreferences.Editor editor = sp.edit(); 
     editor.putInt("my_pref", index); 
     editor.apply(); 
     return true; 
     } 

否則,ListPreference有更新,但第二次撲救。

相關問題