android获取组中的选中复选框

时间:2015-11-11 11:22:30

标签: android checkbox multi-select

我正在实施类似的东西,因此产品可以是1个或更多类别

现在我为CheckBox设置了一个Tag,如

  <CheckBox
                android:id="@+id/c1"
                android:tag="checkbox1"
                android:text="Title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

继续

当用户按下保存时我检查是否选中了每个复选框,而不是将标签添加到arraylist并将其转换为以逗号分隔的字符串并保存

当我需要获取列表并设置所选复选框时,我从db接收String,拆分为String []然后迭代它,使用getResource在android中找到元素,然后将其设置为select =真。

我看到,就像一份巨大的工作,我前段时间看到(不记得)一组复选框,你只需要使用groupOfCheckBox.getSelected();

如果您选择了第一个和第二个,则返回1,2 ..

并将其设置为groupofCheckBox.setSelect(&#34; 1,2&#34;)

但我再也找不到了,有人知道我是在梦中还是真的存在某种方式来做到这一点

1 个答案:

答案 0 :(得分:2)

我制作了一个名为CheckBoxGroupView的自定义视图:

import android.content.Context;
import android.util.AttributeSet;
import android.widget.CheckBox;
import android.widget.GridLayout;
import android.widget.GridView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;


public class CheckBoxGroupView extends GridLayout {

    List<CheckBox> checkboxes = new ArrayList<>();

    public CheckBoxGroupView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void put(CheckBox checkBox) {
        checkboxes.add( checkBox);
        invalidate();
        requestLayout();
    }

    public void remove(Integer id) {
       // TODO: Remove items from ArrayList
    }

    public List<?> getCheckboxesChecked(){

        List<CheckBox> checkeds = new ArrayList<>();
        for (CheckBox c : checkboxes){
            if(c.isChecked())
                checkeds.add(c);
        }

        return checkeds;
    }

    public List<Object> getCheckedIds(){

        List<Object> checkeds = new ArrayList<>();
        for (CheckBox c : checkboxes){
            if(c.isChecked())
                checkeds.add(c.getTag());
        }
        return checkeds;
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();

        for(CheckBox c: checkboxes) {
            addView(c);
        }

        invalidate();
        requestLayout();
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
    }
}

这是使用CheckBoxGroupView的布局的示例:

<com.example.views.CheckBoxGroupView
    android:id="@+id/cbGroup"
    android:columnCount="2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

</com.example.views.CheckBoxGroupView>

设置并获取ID:

CheckBoxGroupView cbGroup = (CheckBoxGroupView) findViewById(R.id.cbGroup);
Checkbox cb = new CheckBox(this);
cb.setTag(1);
cb.setText("Banana");
cbGroup.put(cb);
cbGroup.getCheckedIds().toString();