【问题标题】:Can't use boolean variable in inner class不能在内部类中使用布尔变量
【发布时间】:2015-08-17 06:38:07
【问题描述】:

我在对话窗口中有几个复选框。在客户通过按钮确认他要保存这些设置后,我想保存复选框。 我试图实现上面的代码,但我找不到必须取消布尔值 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();
                    }
                });

});

【问题讨论】:

  • 你遇到了什么错误?
  • 你的内心阶级在哪里?!看不到
  • 在活动顶部声明布尔值,并将 check1=isChecked 更改为 check1=truefalse

标签: android variables checkbox


【解决方案1】:

如果您只想获得按钮的选中状态。 为什么不使用 Checkbox 的 isChecked() 呢? 使 checkbox1, checkbox2 是最终的。 那么

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

【讨论】:

    【解决方案2】:

    选择 1

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

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

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

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

    【讨论】:

    • Choose 1: Modifier public not allowed here, Choose 2: 'setOnClickListener(android.view.View.OnClickListener)' in 'android.view.View' cannot be applied to '(anonymous android.widget .CompoundButton.OnCheckedChangeListener)'
    • @Iljaminati 我猜...你误解了选择 2...现在检查一下。
    猜你喜欢
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多