在循环中添加事件侦听器并获取元素标记的最佳方法

时间:2013-11-16 16:02:22

标签: android android-layout android-checkbox

我必须为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);
                }
            }
        });
    }

1 个答案:

答案 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);
}