不能在内部类中使用布尔变量

时间:2015-06-03 07:29:49

标签: android variables checkbox

我在对话框窗口中有几个复选框。我想在客户确认按钮后保存复选框,他要保存这些设置。 我试图实现上面的代码,我找不到一种方法,我必须解除布尔的check1和check2。希望有人可以帮助我,如果您需要更多信息,请询问。

     protected void onCreate(Bundle savedInstanceState) {

      // ....

       SharedPreferences prefs = getSharedPreferences("testSave", 0);
       checkbox1.setChecked(prefs.getBoolean("cbx1_ischecked" ,false));
       checkbox2.setChecked(prefs.getBoolean("cbx2_ischecked" ,false));

     // ...

     checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener(){
     public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
     // TODO Auto-generated method stub
      check1=isChecked;

     }
    });

    checkbox2.setOnCheckedChangeListener(new OnCheckedChangeListener(){
    public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
    // TODO Auto-generated method stub
     check2=isChecked;

    }

    }); 

      buttonSave.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                     Editor editor = getSharedPreferences("testSave", 0).edit();
                     editor.putBoolean("cbx1_ischecked", check1);
                     editor.putBoolean("cbx2_ischecked", check2);
                     editor.commit();
                    }
                });

});

2 个答案:

答案 0 :(得分:0)

  

选择1

在点击按钮之前添加这两行 -

final boolean checked_1 = check1;
final boolean checked_2 = check2;   

然后,在click事件中使用这些布尔值。

buttonSave.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                         Editor editor = getSharedPreferences("testSave", 0).edit();
                         editor.putBoolean("cbx1_ischecked", checked_1);
                         editor.putBoolean("cbx2_ischecked", checked_2);
                         editor.commit();
                        }
                    });

    });
  

选择2

在类级别声明check1和check2,并使其像 -

boolean check1 = false;
boolean check2 = false; 

protected void onCreate(Bundle savedInstanceState) {

      // ....

       SharedPreferences prefs = getSharedPreferences("testSave", 0);
       checkbox1.setChecked(prefs.getBoolean("cbx1_ischecked" ,false));
       checkbox2.setChecked(prefs.getBoolean("cbx2_ischecked" ,false));

     // ...

     checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener(){
     public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
     // TODO Auto-generated method stub
      check1=isChecked;

     }
    });

    checkbox2.setOnCheckedChangeListener(new OnCheckedChangeListener(){
    public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
    // TODO Auto-generated method stub
     check2=isChecked;

    }

    }); 

      buttonSave.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                     Editor editor = getSharedPreferences("testSave", 0).edit();
                     editor.putBoolean("cbx1_ischecked", check1);
                     editor.putBoolean("cbx2_ischecked", check2);
                     editor.commit();
                    }
                });

});

答案 1 :(得分:0)

如果您只想获得按钮的选中状态。 为什么不使用Checkbox的isChecked()? 复选框1,复选框2是最终的。 然后

buttonSave.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                 Editor editor = getSharedPreferences("testSave", 0).edit();
                 editor.putBoolean("cbx1_ischecked", checkbox1.isChecked());
                 editor.putBoolean("cbx2_ischecked", checkbox2.isChecked());
                 editor.commit();
                }
            });