如何跨活动维护CheckBox状态

时间:2014-09-01 07:19:36

标签: java android checkbox

如何在活动中maintain CheckBox state

我在FirstActivity.java中检查了一个CheckBox,但是当我从任何其他活动move back FirstActivity.java 时,来自SecondActivity.java ..

然后,我是not getting my CheckBox as check我之前检查过的。

使用onSaveInstanceState& onRestoreInstanceState,请参阅以下完整代码: -

public class FirstActivity extends Activity {

    CheckBox cb1;
    Button btnNext;
    private boolean boolCheck1 = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        cb_cb1 = (CheckBox) findViewById(R.id.cb1);

        btnNext = (Button) findViewById(R.id.btnNext);

        // control status of body frame checkboxes
        cb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

           @Override
           public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub
                if(isChecked){

                }
            }
        });

        btnNext.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                    startActivity(intent);
            }
        });
    }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
       super.onSaveInstanceState(savedInstanceState);
       savedInstanceState.putBoolean("Enable", cb1.isChecked());      
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        boolCheck1 = savedInstanceState.getBoolean("Enable");
    }
}

3 个答案:

答案 0 :(得分:4)

您最好的选择是使用sharedPreferences

checkbox所在的活动中,在onCreate()中填写以下内容:

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();

然后,在intent转到其他活动,或“保存”button或其他任何内容,请使用以下内容:

editor.putBoolean("checkbox", yourCheckbox.isChecked()); 
editor.commit(); // commit changes

现在,设置已保存。

当您回到自己的活动时,请在onCreate

中使用此功能
if (pref.getBoolean("checkbox", false) == true){ //false is default value
yourCheckbox.setChecked(true); //it was checked
} else{
yourCheckbox.setChecked(false); //it was NOT checked
}

您可以阅读更多here

希望这有帮助

答案 1 :(得分:1)

使用SharedPreferencesSQLiteDatabase存储复选框的值,您可以在从DatabaseSharedPreference抓取后使用它。

如果您使用onSaveInstanceState&当用户关闭应用并且应用不再位于onRestoreInstanceState时,Memory所有引用都会清除。

答案 2 :(得分:0)

要跨活动维护状态,您必须使用SharedPreferences或数据库。在您的情况下,SharedPreferences是最佳选择

你使用过OnSavedInstance它只保存实例,直到活动没有被销毁,即它仍然在堆栈上。

检查activity lifecycle以了解有关活动何时销毁的详情。

  

对于每个复选框,您可以将其值存储在sharedPreference中   onCreate()你的活动你应该检查复选框   到sharedPreference值

以下是使用共享首选项的方法

SharedPreferences prefs= context.getSharedPreferences("myPrefs", 0);
     SharedPreferences.Editor editor = prefs.edit();
        editor.putBoolean("checkbox1", true);//true if checked 
        editor.commit();
      // get stored value , if no value is stored then assume its false
     prefs.getBoolean("checkbox1", false);