有没有办法彻底摆脱偏好?似乎clear()和remove(key)并没有完全消除偏好。如果调用clear()然后调用SharedPreferences.contains(“key”),则返回true。
请注意,我也提交()clear()。
答案 0 :(得分:1)
以下是clear()
实施的方式:
public Editor clear() {
synchronized (this) {
mClear = true;
return this;
}
}
public boolean commit() {
//...
synchronized (this) {
if (mClear) {
mMap.clear();
mClear = false;
}
}
//...
}
以下是contains(String key)
实施的方式:
public boolean contains(String key) {
synchronized (this) {
return mMap.containsKey(key);
}
}
您可以自己查看代码here。 (请注意,清除所有首选项时不会调用首选项更改侦听器。)
这个实现看起来很好,很可能是你的代码有问题。
这是我的简短示例应用程序,它验证clear()
是否正常工作。
public class TestPrefClear extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.edit().putBoolean("TEST", true).commit();
if(!prefs.contains("TEST")){
throw new IllegalStateException();
}
prefs.edit().clear().commit();
if(prefs.contains("TEST")){
throw new IllegalStateException();
}
}
}
答案 1 :(得分:0)
clear()
含糊不清,首先清除首选项,然后使用修改后的preference. replace()
重新初始化可以满足您的需求,只需将空地图传递给它。