共享偏好不起作用,当我关闭/打开应用程序时,复选框应保持相同状态

时间:2014-09-01 10:14:36

标签: android checkbox sharedpreferences ischecked

嘿伙计们,每次打开我的应用程序时,我想让我的复选框保持在同一状态..我用'ja / nein'字符串得到这个字符串,当我关闭并再次打开我的应用程序时字符串状态...但我的checkbox.setchecked(true / false)不起作用..请帮忙

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"));
}

将这个放入我的Activity

中的onCreate(Bundle savedInstanceState)
mGUI.mBtnVisit.setChecked(mData.getVisitStatus().getBoolean("isChecked", false));

2 个答案:

答案 0 :(得分: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");
            }
        });
    }

希望这可以帮到你!

答案 1 :(得分:0)

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

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

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

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