2017-05-09 76 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

非常感謝! –