Android 如何获取传递给onSharedPreferenceChanged的密钥的值
在我的PreferenceFragment中,我实现了一个OnSharedPreferenceChanged侦听器。它起作用了。我可以在日志中看到“键”与我正在修改的属性(开关首选项)匹配 但我无法确定的是,我如何才能获得密钥的“值”?我已经为此挣扎了一天半,我知道这是可能的Android 如何获取传递给onSharedPreferenceChanged的密钥的值,android,sharedpreferences,Android,Sharedpreferences,在我的PreferenceFragment中,我实现了一个OnSharedPreferenceChanged侦听器。它起作用了。我可以在日志中看到“键”与我正在修改的属性(开关首选项)匹配 但我无法确定的是,我如何才能获得密钥的“值”?我已经为此挣扎了一天半,我知道这是可能的 public class PrefsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeList
public class PrefsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
// set all text correctly
onSharedPreferenceChanged(null, "");
}
@Override
public void onResume() {
super.onResume();
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
super.onPause();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Preference preference = findPreference(key);
Log.i("TAG", String.valueOf(key));
}
}我只是像在程序中的其他地方一样得到了它:
if (key.equals("save_login")) {
boolean saveLogin = AppObject.defaultPrefs.getBoolean("save_login", true);
if(!saveLogin) {
// clear login info that may already have been saved, by default 'true'
SharedPreferences.Editor ed = AppObject.defaultPrefs.edit();
ed.putString("username", "");
ed.putString("password", "");
ed.commit();
}
}
用实际的开关首选项键替换
“我的开关首选项键”
。您需要使用SharedReferences属性来获取键的值
public class PrefsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
// set all text correctly
onSharedPreferenceChanged(null, "");
}
@Override
public void onResume() {
super.onResume();
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
super.onPause();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
String value = sharedPreferences.getString(key, "");
Log.i("TAG", value);
}
}
如果方法找不到具有该键的任何内容,则getString()的第二个参数是默认值(不要返回null)
您必须确保存储在首选项中的类型与恢复的类型相对应(本例中为字符串)。在另一种情况下,您需要使用getInt()或getFloat()…这有点晚了,但我认为我们不必使用
,否则
通过以下代码获得键的值:
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Map<String, ?> all = sharedPreferences.getAll();
Object value = all.get(key);
Log.d("TAG", "Key is: " + key);
Log.d("TAG", "Value is: " + String.valueOf(value));
}
@覆盖
已更改共享首选项上的公共void(SharedReferences SharedReferences,字符串键){
Map all=SharedReferences.getAll();
对象值=all.get(键);
Log.d(“标签”,“键为:”+键);
Log.d(“标记”,“值为:”+String.valueOf(Value));
}
您获得了键的
对象
值 Bro提示:代替Log.i(“TAG”,String.valueOf(key))
您可以编写Log.i(“TAG”,key)代码>或Log.i(“标记”,键+”)代码>以避免空指针异常。非常好。谢谢。赫拉斯特拉斯和尤金的回答都很有效。我只是在第一次将其标记为正确。非常感谢。
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Map<String, ?> all = sharedPreferences.getAll();
Object value = all.get(key);
Log.d("TAG", "Key is: " + key);
Log.d("TAG", "Value is: " + String.valueOf(value));
}