2015-07-20 119 views
0

我正在为Android编写应用程序,并且我在保存活动状态方面遇到困难。我使用sharedpreferences来保存imageview的可见性。我有一个名为“flag”的布尔值,它首先是错误的。当我点击按钮时,标志变为真。我保存了真实的陈述,并将其返回到onCreate方法中。第一次它工作正常,我的图像是可见的。 但下一次,当我关闭应用程序它再次隐形并且该标志是错误的。为什么?我希望标志保持真实,直到我删除应用程序。欢迎任何回应。我复制我的代码和LogCat。SharedPreferences保存问题

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标志为假

07-20 18:36:10.234:d/TEST6(5453):CREATE IZE假

07-20 18:36:27.156:d/TEST6(5453):CREATE标志真正

07-20 18:36:39.390:d/TEST6(5453 ):STOP标志为真

07-20 18:36:43.507:d/TEST6(5453):CREATE标志为假

07-20 18:36:43.507:d/TEST6(5453):CREATE IZE真

07- 20 18:36:47.375:d/TEST6(5453):STOP标志为假

07-20 18:36:48.937:d/TEST6(5453):CREATE标志为假

07-20 18时36分:48.937:D/TEST6(5453):CREATE ize false

我不明白为什么在第二个STOP方法中是错误的。

回答

2

您未在onCreate中设置flag字段。摆脱如果局部变量ize,而是刚刚成立flag直接:

flag = sp.getBoolean(IMAGE, false); 

... 

if(flag){ 
    imageview.setVisibility(View.VISIBLE); 
} 
else{ 
    imageview.setVisibility(View.INVISIBLE); 
} 
+0

GAH! 9秒! +1 – d0nut

+1

@iismathwizard - 嘿。也给你+1。 –

+0

你是对的!非常感谢您的快速帮助! –

2

当你从sharedpreferences布尔读确保再次设置flag。当活动停止时,可能会将IMAGE标志设置为false,因为flag为false。

+1

谢谢你的回答! :) –