Android 如何在两个活动之间同步复选框状态?

Android 如何在两个活动之间同步复选框状态?,android,layout,checkbox,sync,Android,Layout,Checkbox,Sync,我有两个活动,都有相似的布局,即复选框。我想同步两个活动中复选框的状态。我该怎么做 设置类 package com.example.myapp import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log;

我有两个活动,都有相似的布局,即复选框。我想同步两个活动中复选框的状态。我该怎么做

设置类

    package com.example.myapp

    import android.app.Activity;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.CheckBox;
    import android.widget.CompoundButton;
    import android.widget.CompoundButton.OnCheckedChangeListener;
    import android.widget.ProgressBar;
    import android.widget.Toast;

    public class Settings extends Activity {

    CheckBox checkBox_one  = null;
    CheckBox checkBox_two = null;
    CheckBox checkBox_three = null;
    CheckBox checkBox_four = null;
    CheckBox checkBox_five = null;

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

          //SAVE CHECKBOX STATE//

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

          boolean isChecked = getBooleanFromPreferences("isChecked");
          Log.i("start",""+isChecked);
          checkBox_one.setChecked(isChecked);
          //checkBox_one.setChecked(true);//Enable By Default
          checkBox_one.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton view, boolean isChecked) {
                Log.i("boolean",""+isChecked);
                Settings.this.putBooleanInPreferences(isChecked,"isChecked");
            }
          });

          checkBox_two = (CheckBox) findViewById(R.id.checkBox2);

          boolean isCheckedTwo = getBooleanFromPreferences("isCheckedTwo");
          checkBox_two.setChecked(isCheckedTwo );
          //checkBox_two.setChecked(true);//Enable By Default
          checkBox_two.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton view, boolean isChecked) {

                Settings.this.putBooleanInPreferences(isChecked,"isCheckedTwo");
            }
          });

          checkBox_three = (CheckBox) findViewById(R.id.checkBox3);

          boolean isCheckedThree = getBooleanFromPreferences("isCheckedThree");
          checkBox_three.setChecked(isCheckedThree );
          checkBox_three.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton view, boolean isChecked) {

                Settings.this.putBooleanInPreferences(isChecked,"isCheckedThree");
            }
          });

          checkBox_four = (CheckBox) findViewById(R.id.checkBox4);

          boolean isCheckedFour = getBooleanFromPreferences("isCheckedFour");
          checkBox_four.setChecked(isCheckedFour );
          //checkBox_four.setChecked(true);//Enable By Default
          checkBox_four.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton view, boolean isChecked) {

                Settings.this.putBooleanInPreferences(isChecked,"isCheckedFour");
            }
          });

          checkBox_five = (CheckBox) findViewById(R.id.checkBox5);

          boolean isCheckedFive = getBooleanFromPreferences("isCheckedFive");
          checkBox_five.setChecked(isCheckedFive );
          checkBox_five.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton view, boolean isChecked) {

                Settings.this.putBooleanInPreferences(isChecked,"isCheckedFive");
            }
          });

        }

        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;       

        }
        //-------------------------//


        @Override
        public void onBackPressed()
        {
            // Stop back button Functioning
        }

        public void openrate1(View view) { 
        Intent intent = new Intent(this, Rate.class);
        startActivity(intent);
        }

        public void gotohome(View view) { 
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        }

        public void savesettings(View view) { 
            Toast toast=Toast.makeText(this, "Settings successfully saved!", Toast.LENGTH_LONG); 
            toast.show();   
            }                       

        }
package com.example.myapp;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ProgressBar;

public class Progress extends Activity {
    ProgressBar progressBar1;
    ProgressBar progressBar2;
    CheckBox checkBox1;
    CheckBox checkBox2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_progress);
        progressBar1 = (ProgressBar) findViewById(R.id.progressBar1);
        progressBar2 = (ProgressBar) findViewById(R.id.progressBar2);
        checkBox1 = (CheckBox) findViewById(R.id.checkBox1);
        checkBox2 = (CheckBox) findViewById(R.id.checkBox2);

        checkBox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                updateProgressBars();
            }
        });

        checkBox2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                updateProgressBars();
            }
        });
        }

        public void updateProgressBars() {

          progressBar1.setVisibility(View.GONE);
          progressBar2.setVisibility(View.GONE);

         if (checkBox1.isChecked() && checkBox2.isChecked()) {
            progressBar2.setVisibility(View.VISIBLE);
         } else if (checkBox1.isChecked()) {
            progressBar1.setVisibility(View.VISIBLE);
         }



    }


}
进步。班级

    package com.example.myapp

    import android.app.Activity;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.CheckBox;
    import android.widget.CompoundButton;
    import android.widget.CompoundButton.OnCheckedChangeListener;
    import android.widget.ProgressBar;
    import android.widget.Toast;

    public class Settings extends Activity {

    CheckBox checkBox_one  = null;
    CheckBox checkBox_two = null;
    CheckBox checkBox_three = null;
    CheckBox checkBox_four = null;
    CheckBox checkBox_five = null;

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

          //SAVE CHECKBOX STATE//

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

          boolean isChecked = getBooleanFromPreferences("isChecked");
          Log.i("start",""+isChecked);
          checkBox_one.setChecked(isChecked);
          //checkBox_one.setChecked(true);//Enable By Default
          checkBox_one.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton view, boolean isChecked) {
                Log.i("boolean",""+isChecked);
                Settings.this.putBooleanInPreferences(isChecked,"isChecked");
            }
          });

          checkBox_two = (CheckBox) findViewById(R.id.checkBox2);

          boolean isCheckedTwo = getBooleanFromPreferences("isCheckedTwo");
          checkBox_two.setChecked(isCheckedTwo );
          //checkBox_two.setChecked(true);//Enable By Default
          checkBox_two.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton view, boolean isChecked) {

                Settings.this.putBooleanInPreferences(isChecked,"isCheckedTwo");
            }
          });

          checkBox_three = (CheckBox) findViewById(R.id.checkBox3);

          boolean isCheckedThree = getBooleanFromPreferences("isCheckedThree");
          checkBox_three.setChecked(isCheckedThree );
          checkBox_three.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton view, boolean isChecked) {

                Settings.this.putBooleanInPreferences(isChecked,"isCheckedThree");
            }
          });

          checkBox_four = (CheckBox) findViewById(R.id.checkBox4);

          boolean isCheckedFour = getBooleanFromPreferences("isCheckedFour");
          checkBox_four.setChecked(isCheckedFour );
          //checkBox_four.setChecked(true);//Enable By Default
          checkBox_four.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton view, boolean isChecked) {

                Settings.this.putBooleanInPreferences(isChecked,"isCheckedFour");
            }
          });

          checkBox_five = (CheckBox) findViewById(R.id.checkBox5);

          boolean isCheckedFive = getBooleanFromPreferences("isCheckedFive");
          checkBox_five.setChecked(isCheckedFive );
          checkBox_five.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton view, boolean isChecked) {

                Settings.this.putBooleanInPreferences(isChecked,"isCheckedFive");
            }
          });

        }

        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;       

        }
        //-------------------------//


        @Override
        public void onBackPressed()
        {
            // Stop back button Functioning
        }

        public void openrate1(View view) { 
        Intent intent = new Intent(this, Rate.class);
        startActivity(intent);
        }

        public void gotohome(View view) { 
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        }

        public void savesettings(View view) { 
            Toast toast=Toast.makeText(this, "Settings successfully saved!", Toast.LENGTH_LONG); 
            toast.show();   
            }                       

        }
package com.example.myapp;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ProgressBar;

public class Progress extends Activity {
    ProgressBar progressBar1;
    ProgressBar progressBar2;
    CheckBox checkBox1;
    CheckBox checkBox2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_progress);
        progressBar1 = (ProgressBar) findViewById(R.id.progressBar1);
        progressBar2 = (ProgressBar) findViewById(R.id.progressBar2);
        checkBox1 = (CheckBox) findViewById(R.id.checkBox1);
        checkBox2 = (CheckBox) findViewById(R.id.checkBox2);

        checkBox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                updateProgressBars();
            }
        });

        checkBox2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                updateProgressBars();
            }
        });
        }

        public void updateProgressBars() {

          progressBar1.setVisibility(View.GONE);
          progressBar2.setVisibility(View.GONE);

         if (checkBox1.isChecked() && checkBox2.isChecked()) {
            progressBar2.setVisibility(View.VISIBLE);
         } else if (checkBox1.isChecked()) {
            progressBar1.setVisibility(View.VISIBLE);
         }



    }


}

为什么不将一个
布尔值作为
intent.putExtra(“checkValue”,value)传递

具体来说:

在活动A中

让我们假设
ActivityA扩展了Activity

private boolean checkState = true; //Let's say you checkbox is currently checked.

public void sendCheckState(){
    Intent intent = new Intent(ActivityA.class, ActivityB.class);
    intent.putExtra("checkValue", value);
    startActivity(intent);
}
Intent intent = getIntent();

Bundle extras = intent.getExtras();
if (extras != null) {

    if (extras.containsKey("checkValue")) {
        boolean checkValue = extras.getBoolean("checkValue", false);

        // TODO: Do something with the value.
    }
}
现在,您只需在获得
布尔值后调用
sendCheckState()

在活动B中

您可以在
onCreate()
中调用此代码(我们仍然假设您的
ActivityB扩展了活动


您可以为此使用
SharedReferences
。在每个
活动的
OnCreate()
方法中。您可以检查
SharedReferences
的值是否执行。如果执行,则根据它设置
复选框的状态。

您可以在
复选框上设置
SharedReference
事件侦听器
OnCheckedChangeListener()
这是两个活动之间的通信问题。为此,您可以尝试以下方法:

  • 正如Jatin Dudhat所说,您可以从活动A保存数据,从活动B获取数据
  • 使用startActivity(Intent),如果要将数据从活动A传递到B,可以在活动A中使用startActivity(Intent),并将Intent与数据一起使用并传递到活动B
  • 如果您在活动A中启动活动B,并且希望在返回到活动A时从活动B获取一些数据,则可以使用startActivityForResult(intent,requestCode)
  • 您还可以使用广播进行两个活动之间的通信
  • 可以通过类扩展应用程序的成员变量保存数据

  • 不太准确,但希望能为您提供一些帮助。

    将签出状态从活动A传递到活动Bextras@Libin我该怎么做?请解释清楚。谢谢检查我的答案。我按照@Libin的建议做了。去学习android的基础知识,比如intent、SharedReference等。你能发布你的代码吗?我也许能帮你,但我需要先做点什么。假设您的
    复选框所在的
    活动是
    活动a
    。现在,如果您看到我的答案,您可能会看到,我假设一个
    布尔值
    ,其中一个值为
    复选框
    es状态(在我的示例中:
    true
    )。然后,如果您的
    活动a扩展了活动
    ,您可以使用
    开始活动(intent)在该
    活动的任何部分a
    。所以,您不应该无法实现
    意图。
    在这种情况下,您打算在哪里实现它?我再次编辑了我的答案。我尽可能的具体。你已经选择了@Jatin Dudhat suggestion。看看答案。但是,在您的代码中,您正在实现
    SharedReferences
    。请检查链接。