2014-09-01 63 views
0

嘿,我想让我的复选框每次打开我的应用程序时保持相同的状态..我用'ja/nein'字符串,当我关闭串状态,然后再次打开我的应用程序...但我checkbox.setchecked(真/假)不工作..请帮助Sharedpreferences不起作用,当我关闭/打开应用程序时,复选框应该保持相同状态

public void changeVisitStatus(){ 
    SharedPreferences visitStatus = mData.getVisitStatus(); 
    SharedPreferences.Editor editor = visitStatus.edit(); 

    if(visitStatus.getString(mData.getVisitKey(), "nein").equals("nein")){ 
     editor.putString(mData.mVisitKey, "ja"); 
     editor.commit(); 
     mGUI.mBtnVisit.setChecked(true); 
    } 
    else{ 
     editor.putString(mData.mVisitKey, "nein"); 
     editor.commit(); 
     mGUI.mBtnVisit.setChecked(false); 
    } 
    mGUI.getVisitStatus().setText(visitStatus.getString(mData.mVisitKey, "Nein")); 
} 

编辑:我尝试了另一种方式。 。我认为它会更好,但不工作以及..

public void changeVisitStatus(){ 
    SharedPreferences visitStatus = mData.getVisitStatus(); 
    SharedPreferences.Editor editor = visitStatus.edit(); 

    if(visitStatus.getString(mData.getVisitKey(), "nein").equals("nein")){ 
     editor.putString(mData.mVisitKey, "ja"); 
     editor.putBoolean("isChecked", true); 
     editor.commit(); 

    } 
    else{ 
     editor.putString(mData.mVisitKey, "nein"); 
     editor.putBoolean("isChecked", false); 
     editor.commit(); 

    } 
    mGUI.getVisitStatus().setText(visitStatus.getString(mData.mVisitKey, "Nein")); 
} 

并把这一个到我的onCreate(捆绑s avedInstanceState)在我的活动

mGUI.mBtnVisit.setChecked(mData.getVisitStatus().getBoolean("isChecked", false)); 

回答

0

尝试这样的:

public void putBooleanInPreferences(boolean isChecked,String key){ 
     SharedPreferences sharedPreferences = this.getPreferences(Activity.MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putBoolean(key, isChecked); 
     editor.commit();   
    } 
    public boolean getBooleanFromPreferences(String key){ 
     SharedPreferences sharedPreferences = this.getPreferences(Activity.MODE_PRIVATE); 
     Boolean isChecked = sharedPreferences.getBoolean(key, false); 
     return isChecked;  
    } 

中的onCreate 和()

CheckBox checkBox = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     checkBox = (CheckBox) findViewById(R.id.my_check_box); 
     boolean isChecked = getBooleanFromPreferences("isChecked"); 
     Log.i("start",""+isChecked); 
     checkBox.setChecked(isChecked); 
     checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton view, boolean isChecked) { 
       Log.i("boolean",""+isChecked); 
       TestActivity.this.putBooleanInPreferences(isChecked,"isChecked"); 
      } 
     }); 
    } 

希望这可以帮助你!

+0

默认值应该是false – eldjon 2014-09-01 10:32:29

+0

@Krupa Patel谢谢!我尝试了你的代码,但仍然没有像我想象的那样工作...检查 - 'ja'...未检查 - '否'... :(( – PeterP 2014-09-01 13:27:20

0

您只向我们显示更改状态的代码,可能是从OnClick侦听器调用的复选框。

您还应该添加仅从SharedPreferences中读取状态并根据该状态设置复选框状态的代码(可以是相同的代码,但if条件否定)。

您需要从OnCreate事件调用该代码。

public void setVisitStatus(){ 
    SharedPreferences visitStatus = mData.getVisitStatus(); 
    mGUI.getVisitStatus().setText(visitStatus.getString(mData.mVisitKey, "Nein")); 
} 
+0

不,我没有OnClick侦听器为我的复选框。可以处理任何有关changig状态(如果这状态 - 所以复选框将状态呢?)我不明白你只是读状态和设置复选框状态是什么意思?...你是指第一次尝试或编辑?@velis – PeterP 2014-09-01 11:36:19

+0

对不起 - 当然我得到了一个onClick监听器..大声笑 – PeterP 2014-09-01 11:56:31

+0

如何从SharedPreferences中只读取satus ..对不起,我的问题..我只是一个初学者,并尝试学习 – PeterP 2014-09-01 12:16:25

相关问题