java - Android:从另一个 Activity 获取不正确的复选框值

标签 java android android-activity checkbox sharedpreferences

在我的 mainActivity 中,我试图读取另一个 Activity 中复选框的值。然而,我似乎得到了与实际值(value)相反的结果。我怀疑问题是我试图在打开包含复选框的 Activity 之前获取该值。

在我的 mainActivity 中,我有一个

  public boolean checkValue;

我想在其他 Activity 中提供复选框的值,如下所示

 @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);   

        }

其他 Activity 如下所示

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

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

最佳答案

你的假设是正确的。如果您在创建 Activity 之前调用 getCheckValue,您将仅获得静态变量 checkStatus 的默认值。 通常您不想将逻辑与用户界面混合在一起。 为什么不直接从您的共同偏好中获取正确的值? 您已经在 loadSavedPreferences() 中执行了该操作。

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

调用:

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

关于java - Android:从另一个 Activity 获取不正确的复选框值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44009482/

相关文章:

java - 将单个 POI SS 表转换为 byte[] - Java

java - Android - 除了正常的 SSL 证书外,还验证自签名证书

android - Flutter - 一段时间后自动刷新 map 上标记的图标

java - 使用 Xcode 4/OS X 10.6 调试 JNI 代码

java - 如何修复 java.io.IOException : Server returned HTTP response code: 403

java - System.currentTimeMillis() 行为错误

android - android studio preview 和 phone 的区别

android - 从 BroadcastReceiver 访问 Activity 实例

android - onActivityResult 从未在 TabActivity 中被调用

android - 如何启动一个新的 Activity 并发送参数?