Android tabhost内按钮按下状态的共享首选项无法重新启动
tabhost内的共享首选项不适用于按钮按下状态 我正在更改按下状态下按钮的背景。但是,当我重新启动(关闭和打开)手机时,共享首选项并没有保存状态 变量Android tabhost内按钮按下状态的共享首选项无法重新启动,android,button,sharedpreferences,save,reboot,Android,Button,Sharedpreferences,Save,Reboot,tabhost内的共享首选项不适用于按钮按下状态 我正在更改按下状态下按钮的背景。但是,当我重新启动(关闭和打开)手机时,共享首选项并没有保存状态 变量 btn_state 在下面的行中,始终返回False final boolean btn_state = prefs.getBoolean("BUTTON_STATE", isclick); 任何帮助都会被感激的,谢谢 这是我的密码 private SharedPreferences prefs; private Strin
btn_state
在下面的行中,始终返回False
final boolean btn_state = prefs.getBoolean("BUTTON_STATE", isclick);
任何帮助都会被感激的,谢谢
这是我的密码
private SharedPreferences prefs;
private String prefName = "MyPref";
private SharedPreferences.Editor editor;
private static final String BUTTON_STATE = "button_selected";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
prefs = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext());
final boolean btn_state = prefs.getBoolean("BUTTON_STATE", isclick);
editor = prefs.edit();
if(btn_state == false){
seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
}
else if(btn_state == true){
seatdirnbtn.setBackgroundResource(R.drawable.icon4);
}
}
@Override
public void onStop() {
super.onStop();
prefs = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext());
editor = prefs.edit();
editor.putBoolean("BUTTON_STATE", isclick);
editor.commit();
}
public static boolean isclick = false;
private View.OnClickListener listner1 = new View.OnClickListener() {
public void onClick(View v) {
if (isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
isclick = true;
prefs = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext());
editor = prefs.edit();
editor.putBoolean("BUTTON_STATE", isclick);
editor.commit();
} else {
seatdirnbtn.setBackgroundResource(R.drawable.icon4);
isclick = false;
}
isclick = !isclick;
}
编辑
我将使用GetSharedReferences()而不是GetDefaultSharedReferences()。根据我在StackOverflow上看到的一些问题,例如,默认首选项方法可能会有一些问题 您可以使用getSharedReferences()更明确地指定首选项文件,这可能有助于解决此问题。如果您想尝试,请查看Android开发者提供的代码示例和解释 在您列出的代码中,有几点我不明白。 您有两个布尔变量,onclick和btn_state。为什么不只用一个呢? btn_状态被宣布为最终状态。为什么?
您已经声明了一个BUTTON_状态字符串,但在引用Pref时不使用它,而是使用字符串“BUTTON_状态” 谢谢你的回复,我照你说的做了,但它不起作用。为什么isclick变量是静态的?您的onClick方法的if语句似乎运行异常,如果它已经为true,它会将isclick设置为true,而您的“else”会将isclick设置为false,即使它必须已经为false。谢谢,我将尝试删除onClick中的isclick=true和isclick=false,重新启动时我想检索按钮的保存状态,我的代码中还需要任何其他更改吗?我认为您的isclick变量是静态的这一事实可能会导致问题,尽管我可能错了。无论如何,我会尝试使它非静态,我甚至全局声明isclick变量为private boolean isclick=false;仍然不起作用
private boolean isclick ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) { isclick = false; }
prefs = this.getSharedPreferences(prefName, MODE_PRIVATE);
isclick = prefs.getBoolean("prefName", false);
System.out.println("bool? " + isclick);
if (isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
} else if (!isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4);
}
}
@Override
public void onRestart() {
super.onRestart();
if (isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4);
} else if (!isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
}
}
@Override
public void onStop() {
super.onStop();
prefs = this.getSharedPreferences(prefName, MODE_PRIVATE);
editor = prefs.edit();
editor.putBoolean("prefName", true);
editor.commit();
}
private View.OnClickListener listner1 = new View.OnClickListener() {
public void onClick(View v) {
if (isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
editor = prefs.edit();
editor.clear();
editor.putBoolean("prefName", true);
editor.commit();
} else if (!isclick) {
seatdirnbtn.setBackgroundResource(R.drawable.icon4);
editor = prefs.edit();
editor.clear();
editor.putBoolean("prefName", false);
editor.commit();
}
isclick = !isclick;
}
};