Android:从另一个活动获取错误的CheckBox值

时间:2017-05-16 18:58:10

标签: java android android-activity checkbox sharedpreferences

在我的mainActivity中,我试图读取另一个活动中复选框的值。然而,我似乎与实际价值相反。我怀疑问题是我在打开包含复选框的活动之前尝试获取该值。

在我的mainActivity中我有一个

  public boolean checkValue;

我想在其他活动中给出复选框的值,例如

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    checkValue = SettingsActivity.getCheckValue(); 
}

我后来像这样使用

 public class JSONTask extends AsyncTask<String, String, String >{
...
}

 @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        checkValue = SettingsActivity.getCheckValue();

        if(checkValue != true) {
               TextView1.setVisibility(View.VISIBLE);
        }
        else{
                TextView1.setVisibility(View.INVISIBLE);   

        }

其他活动看起来像这样

public class SettingsActivity extends AppCompatActivity {

private static CheckBox checkBox1;

public static boolean checkStatus;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);


    checkBox1 = (CheckBox) findViewById(R.id.checkBox);;




    loadSavedPreferences();
    savePreferences("CheckBox_Value", checkBox1.isChecked());


    checkStatus = checkBox1.isChecked();


}

private void loadSavedPreferences() {

    SharedPreferences sharedPreferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    boolean checkBoxValue = sharedPreferences.getBoolean("CheckBox_Value", true);

    if (checkBoxValue) {
        checkBox1.setChecked(true);
    } else {
        checkBox1.setChecked(false);
    }


}

private void savePreferences(String key, boolean value) {

    SharedPreferences sharedPreferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean(key, value);
    editor.commit();

}




@Override
public void onDestroy(){
    super.onDestroy();
    savePreferences("CheckBox_Value", checkBox.isChecked());


}

public static Boolean getCheckValue(){
    return checkStatus;
}

我怀疑解决方案可能是在应用程序中打开之前初始化settingActivity,但不确定这是否可行。

1 个答案:

答案 0 :(得分:2)

你的假设是正确的。如果在创建活动之前调用getCheckValue,则只需获取静态变量checkStatus的默认值。 通常,您不希望将逻辑与UI混合使用。 为什么不直接从共享偏好中获取正确的值? 您已经在loadSavedPreferences()中执行此操作。

而不是调用checkValue = SettingsActivity.getCheckValue();

致电:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
ceckValue = sharedPreferences.getBoolean("CheckBox_Value", true);