在我的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,但不确定这是否可行。
答案 0 :(得分:2)
你的假设是正确的。如果在创建活动之前调用getCheckValue,则只需获取静态变量checkStatus的默认值。 通常,您不希望将逻辑与UI混合使用。 为什么不直接从共享偏好中获取正确的值? 您已经在loadSavedPreferences()中执行此操作。
而不是调用checkValue = SettingsActivity.getCheckValue();
致电:
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
ceckValue = sharedPreferences.getBoolean("CheckBox_Value", true);