我必须为LinearLayout中的所有复选框添加一个监听器,并且每次在每个元素上发生单击时,检查标记值。我做了类似的事情,但我不习惯在循环中声明一个String。任何最佳实践提示?
ViewGroup generalContainer = (ViewGroup) contextView;
ViewGroup optionsContainer = (ViewGroup) generalContainer.getChildAt(0);
int len = optionsContainer.getChildCount();
CheckBox currentCheckBox;
for (int i = 0; i < len; i++) {
currentCheckBox = (CheckBox) optionsContainer.getChildAt(i);
final String currentTag = (String) currentCheckBox.getTag().toString();
currentCheckBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (((CheckBox) v).isChecked()) {
Log.i("ulog", "is checked " + currentTag);
} else {
Log.i("ulog", "not checked " + currentTag);
}
}
});
}
答案 0 :(得分:0)
如果您正在寻找更有效的方法,可以为所有OnClickListener
实例声明一个CheckBox
。 (我假设您在创建复选框时为其设置了唯一标记。)
因此,如果您保证它们是唯一的,那么将标签用作字符串是没有问题的。
OnClickListener checkBoxOnClickLister = new OnClickListener() {
@Override
public void onClick(View v) {
CheckBox checkBox = ((CheckBox) v);
String currentTag = (String) checkBox.getTag();
if (checkBox.isChecked()) {
Log.i("ulog", "is checked " + currentTag);
} else {
Log.i("ulog", "not checked " + currentTag);
}
}
};
for (int i = 0; i < len; i++) {
currentCheckBox = (CheckBox) optionsContainer.getChildAt(i);
currentCheckBox.setOnClickListener(checkBoxOnClickLister);
}