gpt4 book ai didi

Android:从 SharedPreferences 更新显示的首选项

转载 作者:行者123 更新时间:2023-11-29 02:07:24 25 4
gpt4 key购买 nike

我正在编写一个带有 preferencesActivity 的 android 应用程序,其中在我的 preferencesActivity 实例中所做的选择会影响显示的其他首选项项的值。虽然我能够以语法方式更改基础 SharedPreferences 项的值,但在我退出 preferencesActivity 并重新加载它之前,这些更改的值不会反射(reflect)在显示的列表项中。下面是我的设置类和 xml 文件的精简版本,它说明了问题。如果用户使用键 instrumentList 将 Guitar 设置为首选项的值,我希望使用键 tuningChoice 的首选项恢复为 Standard。

//necessary import declarations go here
public class Settings extends PreferenceActivity implements OnSharedPreferenceChangeListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(this);
app_preferences.registerOnSharedPreferenceChangeListener(this);
}

public void onSharedPreferenceChanged (SharedPreferences sharedPreferences, String key) {
Log.d("onSharedPreferencesChanged", "sharedPreferences changed. key: " + key);
Editor preferencesMod = sharedPreferences.edit();
String instrumentChoice = sharedPreferences.getString("instrumentList", "Guitar");
if(key.equals("instrumentList")) {
Log.d("Settings", "key is instrumentList. chooseTuning before if: " + sharedPreferences.getString("chooseTuning", "no luck"));
if(instrumentChoice.equals("Guitar")) {
preferencesMod.putString("chooseTuning", "Standard");
preferencesMod.commit();
Log.d("Settings", "chooseTuning after if: " + sharedPreferences.getString("chooseTuning", "ciao"));
}
}
}
}

xml 文件 preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="Settings">
<ListPreference android:title="Choose an Instrument" android:key="instrumentList" android:entryValues="@array/instruments" android:entries="@array/instruments"/>
<ListPreference android:title="Choose Tuning" android:key="chooseTuning" android:entryValues="@array/tuningChoices" android:entries="@array/tuningChoices" android:persistent="true"/>
</PreferenceScreen>

我可以在我的 onSharedPreferenceChanged 方法中再次调用 addPreferencesFromResource 并加载所有偏好项的副本,显示在旧项下方,并具有正确的值。如果我能想出一些方法来取消在 onCreate 期间调用的初始 addPreferencesFromResource,我想我会被设置。

任何帮助将不胜感激,谢谢

最佳答案

我按照这些思路做了一些事情......希望它有所帮助:

    ListPreference list = (ListPreference) getPreferenceManager().findPreference("myList");
list.setValue(sharedPrefs.getString("myList", "default"));
list.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

public boolean onPreferenceChange(Preference preference, Object newValue) {
sharedPrefs.put("myList", newValue.toString());
return true;
}

});

关于Android:从 SharedPreferences 更新显示的首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9262600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com