为复选框数组设置OnClickListener

时间:2017-05-09 00:44:50

标签: java android checkbox

我有一系列复选框,所有复选框都需要OnClickListener来查看它们何时被选中/取消选中。这就是我所拥有的:

CheckBox[] sens = new CheckBox[3];
for (int i = 0; i < 3; i++)
{
    cb = new CheckBox(this);
    cb.setText(strings[i]);
    cb.setOnClickListener(new View.OnClickListener() {
                              @Override
                              public void onClick(View v) {
                                  if (cb.isChecked()) {
                                      System.out.println("Checked");
                                  } else {
                                      System.out.println("Unchecked");
                                  }
                              }
                          });
    sens[i] = cb;
    mainlayout.addView(sens[i]);
}

但是显示器/控制台只打印&#34;未选中&#34;,无论是否检查过。有没有更好的方法来做到这一点?复选框必须是动态的

1 个答案:

答案 0 :(得分:1)

您应该使用setOnCheckedChangeListener方法而不是setOnClickListener,并且可以使用setTag方法设置位置/ ID来处理复选框。

文档:注册当此按钮的选中状态发生变化时要调用的回调。

private void createCheckBoxes(final int count) {
    for (int i = 0;i < count; i++) {
        final CheckBox checkBox = createCheckBox(this, strings[i], i);
        mainlayout.addView(checkBox);
    }
}

private CheckBox createCheckBox(final Context context, final String text, final int id) {
    final CheckBox checkBox = new CheckBox(context);

    checkBox.setTag(id);
    checkBox.setText(text);
    checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(final CompoundButton buttonView, final boolean isChecked) {
            if (isChecked) {
                System.out.println("Checked");
            } else {
                System.out.println("Unchecked");
            }
        }
    });

    return checkBox;
}