我无法使用SharedPreferences
保存布尔值。由于某种原因,该值始终为true
。这就是保存值的方式:
settings = getSharedPreferences("UserConfigs", MODE_PRIVATE);
b1 = settings.getBoolean("Gravity", false);
editor = settings.edit();
action_G.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!b1) {
action_G.setImageResource(R.drawable.ic_align_right);
txt.setGravity(Gravity.RIGHT);
editor.putBoolean("Gravity", true);
editor.commit();
} else {
action_G.setImageResource(R.drawable.ic_align_center);
txt.setGravity(Gravity.CENTER);
editor.putBoolean("Gravity", false);
editor.commit();
}
b1 = !b1;
}
});
有什么问题?
编辑:
更改代码但不保存?
settings = getSharedPreferences("UserConfigs", MODE_PRIVATE);
editor = settings.edit();
action_G.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (settings.getBoolean("Gravity", false)) {
editor.putBoolean("Gravity", false).apply();
action_G.setImageResource(R.drawable.ic_align_center);
txt.setGravity(Gravity.CENTER);
} else {
editor.putBoolean("Gravity", true).apply();
action_G.setImageResource(R.drawable.ic_align_right);
txt.setGravity(Gravity.RIGHT);
}
}
});
答案 0 :(得分:0)
如果您需要在匿名类中使用活动上下文中的变量,则需要将其声明为final。
因此,在调用onClickListener之后,b1
之前初始化的onClickListener
变量不会更改。因此,对内部b1
的引用与全局不同b1
。
所以,不要直接使用b1
使用settings.getBoolean("Gravity", false);
。
答案 1 :(得分:-1)
之所以发生这种情况,是因为最后每次点击都会将您的b1转换为!b1(b1 != b1
)表示每次点击都会将“重力”仅保存为“true”。