我正在为Android编写应用程序,我在保存活动状态方面遇到了困难。我使用共享偏好来保存图像视图的可见性。我有一个名为" flag"的布尔值这是假的。当我点击按钮时,标志变为true。我保存了真实的语句并在onCreate方法中将其重新执行。第一次它工作正常,我的图像是可见的。 但是下次当我关闭应用程序时,它再次看不见而且旗帜是假的。为什么?在删除应用程序之前,我希望此标志保持正确。欢迎任何回复。我复制了我的代码和LogCat。
private static final String DB_INIT = "DB_INIT";
private static final String IMAGE = "IMAGE";
private boolean flag = false;
Button btn;
ImageView imageview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button)findViewById(R.id.btn);
imageview = (ImageView)findViewById(R.id.imageview);
SharedPreferences sp = getApplicationContext().getSharedPreferences(DB_INIT, Context.MODE_PRIVATE);
Boolean ize = sp.getBoolean(IMAGE, false);
Log.d("TEST6","CREATE flag "+flag);
Log.d("TEST6","CREATE ize "+ize);
if(ize){
imageview.setVisibility(View.VISIBLE);
}
else{
imageview.setVisibility(View.INVISIBLE);
}
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
flag = true;
imageview.setVisibility(View.VISIBLE);
Log.d("TEST6","CREATE flag " +flag);
}
});
}
@Override
protected void onStop() {
SharedPreferences sp = getApplicationContext().getSharedPreferences(DB_INIT,Context.MODE_PRIVATE);
SharedPreferences.Editor et = sp.edit();
et.putBoolean(IMAGE, flag);
Log.d("TEST6","STOP flag " +flag);
et.commit();
super.onStop();
} }
这是我的LogCat:
07-20 18:36:10.226:D / TEST6(5453):CREATE flag false
07-20 18:36:10.234:D / TEST6(5453):创建错误
07-20 18:36:27.156:D / TEST6(5453):CREATE flag true
07-20 18:36:39.390:D / TEST6(5453):STOP标志为真
07-20 18:36:43.507:D / TEST6(5453):CREATE flag false
07-20 18:36:43.507:D / TEST6(5453):创建ize true
07-20 18:36:47.375:D / TEST6(5453):停止标志错误
07-20 18:36:48.937:D / TEST6(5453):CREATE flag false
07-20 18:36:48.937:D / TEST6(5453):创建错误
我不明白为什么在第二种STOP方法中出现错误。
答案 0 :(得分:2)
您未在flag
中设置onCreate
字段。如果局部变量ize
取消,而只是直接设置flag
:
flag = sp.getBoolean(IMAGE, false);
...
if(flag){
imageview.setVisibility(View.VISIBLE);
}
else{
imageview.setVisibility(View.INVISIBLE);
}
答案 1 :(得分:2)
当您从共享偏好中读取布尔值时,请确保再次设置flag
。当活动停止时,它可能会将IMAGE
标志设置为false,因为flag
为false。