2011-07-12 5 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(Preferencesプリファレンス、Object newValue) –

2

一部correctives、あなたが好みの値を保存したい場合:

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が更新を持っていますが、二回目から節約できます。

関連する問題