如何在* onPreferenceChange之后调用函数*
问题描述:
我是Android开发新手。 在我的应用程序中,当用户更改首选项时,应该调用一个函数来更新某些变量。如何在* onPreferenceChange之后调用函数*
这是我当前的代码:
mypref.setOnPreferenceChangeListener(
new OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference arg0, Object arg1) {
if(arg1.toString().matches("...") == false) {
...
return false;
}
...
updateVariables();
return true;
}
});
的问题是,当updateVariables()
被调用时,优先值尚未更新,功能看到旧值。
private void updateVariables()
{
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
Map<String, ?> savedKeys = sharedPref.getAll();
for (Map.Entry<String, ?> entry : savedKeys.entrySet()) {
// for each preference...
}
}
什么是最不具侵略性的解决方案?谢谢!
答
使用PreferenceFragmentCompat
public class FragmentSettings
extends PreferenceFragmentCompat
implements SharedPreferences.OnSharedPreferenceChangeListener
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.app_preferences);
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
switch(key)
{
case "KEY1":
// DO STUFF
break;
case "KEY2":
// DO STUFF
break;
}
}
感谢。但是如果在'updateVariables()'我必须迭代许多其他首选项呢?我需要很多不同的论点。 – danieleds
这里只是给你一个改变了的偏好值。所有其他人都是一样的,直到回调回来。所以你只需要转发一个,所有其他的可以通过创建一个普通的'SharedPreferences'对象来读取。 *(除此之外,如果您提供了很多参数,仍然可以使用'List'作为参数)* – 2011-10-08 09:13:27
嗯......也许我做错了,但我添加了一个'updateVariables ()'。 如何使用更新后的值添加额外参数,如何进行循环?我如何避免处理相同的首选项2次(一次使用来自SharedPreferences的旧值,一次使用来自参数的新值)? 我只能想到肮脏的解决方案:S – danieleds