2017-05-09 42 views
0

我有一个复选框数组都需要一个OnClickListener来查看它们何时被选中/未选中。这是我有:设置复选框数组的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]); 
} 

但监视器/控制台只打印“未选中”,无论是否选中。有没有更好的方法来做到这一点?复选框必须是动态的

回答

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; 
} 
+0

非常感谢! –