可能已经分配了最终的局部变量cb

时间:2015-05-31 08:19:22

标签: java android

我正在尝试使用if语句来检查复选框是否已设置,但我不知道如何在if语句中定义cb以使其工作。

当我宣布cb为局部变量时,我得到了两个错误:

  

可能已经指定了最终的局部变量cb

     

无法在基本类型int

上调用isChecked()
        private void createCheckboxList(final ArrayList<Integer> items) {
                final CheckBox cb;

                final LinearLayout ll = (LinearLayout) findViewById(R.id.lila);
                for (int i = 0; i < items.size(); i++) {

      //here I am getting `The final local variable cb may already have been assigned`

                    cb = new CheckBox(this);
                    cb.setText(String.valueOf(items.get(i)));
                    cb.setId(i);
                    ll.addView(cb);

                }
                Button btn = new Button(this);
                btn.setLayoutParams(new LinearLayout.LayoutParams(500, 150));
                btn.setText("submit");
                ll.addView(btn);

                btn.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        for (int i : items) {
                         // here I am getting `Cannot invoke isChecked() on the primitive type int
        `
                            if (cb.getId().isChecked()) {

                            }
                        }

                    }
                });

            }

1 个答案:

答案 0 :(得分:3)

您已将变量声明为final(设置后无法更改):

final CheckBox cb;

您需要在该点设置值,或者删除最终修饰符(您的循环将尝试多次分配值)。

至于另一个问题:

if (cb.getId().isChecked())

.isChecked()之后添加.getId()时,这是一种简短的说法,“在第一种方法的返回对象上调用此方法。

错误告诉您该方法不返回对象,而是返回基本类型(int)。您需要在Checkbox对象上调用第二个方法,尝试类似:

((CheckBox)v).isChecked();

或者,如果您已经拥有ID:

((CheckBox) findViewById(id)).isChecked();