我已经设法使用xml创建了一个菜单,并且扩展了PreferenceActivity并实现了OnSharedPreferenceChangeListener,现在我希望每次用户更改首选项的值时都会收到通知(例如,当用户更改用户名时)。为此,我使用registerOnSharedPreferenceChangeListener方法注册了我的类。
并实现了onSharedPreferenceChanged方法。
这使我的应用程序能够收到更改通知,但我怎样才能实际更改该值?
是否有任何关于此的好教程,因为我没有找到任何。
答案 0 :(得分:1)
如果我理解你的问题,这就是我执行更改的方式:
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
// Get a link to your preferences:
SharedPreferences s = getSharedPreferences("MY_PREFS", 0);
// Create a editor to edit the preferences:
SharedPreferences.Editor editor = s.edit();
// Let's do something a preference value changes
if (key.equals("hintsPreference"))
{
// Create a reference to the checkbox (in this case):
CheckBoxPreference mHints = (CheckBoxPreference)getPreferenceScreen().findPreference("hintsPreference");
//Lets change the summary so the user knows what will happen using a one line IF statement:
mHints.setSummary(mHints.isChecked() ? "Hints will popup." : "No hints will popup.");
// Lets store the new preference:
editor.putBoolean("hintsPreference", mHints.isChecked());
}
/**
* You could perform several else if statements, or probably better use a switch block.
*/
// Save the results:
editor.commit();
}
我的XML条目看起来像:
<CheckBoxPreference android:key="hintsPreference" android:title="Show Helpful Hints:" />
这没有经过测试,我已经剥离了很多,以使其更简单,但希望它足以帮助。
例如,在您的onCreate方法中,您可以执行以下操作:
// Link to your checkbox:
CheckBoxPreference mHints = (CheckBoxPreference)getPreferenceScreen().findPreference("hintsPreference");
// Set the summary based on the one line IF statement:
mHints.setSummary(s.getBoolean("hintsPreference", true) ? "Hints will popup." : "No hints will popup.");
// Set the box as either ticked or unticked:
mHints.setChecked(s.getBoolean("hintsPreference", true));