android 获取组中选中的复选框

标签 android checkbox multi-select

我正在实现类似类别的功能,因此产品可以属于 1 个或多个类别

现在我为复选框设置了一个标签,例如

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

然后继续

当用户按下保存时,我检查是否选择了每个复选框,然后将标记添加到数组列表并将其转换为以逗号分隔的字符串并保存

当我需要获取列表并设置选定的复选框时,我从数据库接收字符串,拆分为 String[] 然后迭代它,使用 getResource 查找 android 中的元素,然后将其设置为 select=正确。

我发现这就像一项艰巨的工作,我不久前看到(不记得了)一种复选框组,您只需使用 groupOfCheckBox.getSelected();

如果您选择了数字 1 和数字 2,则返回 1,2..

将其设置为选中很容易,如 groupofCheckBox.setSelect("1,2")

但我再也找不到它了,有人知道我是否在梦想它或者真的存在某种方法可以做到这一点

最佳答案

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

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();

关于android 获取组中选中的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33649492/

相关文章:

android - 在 startActivity(Intent i) 之后获取 Activity

asp.net - OnClick 与 OnClientClick 的 asp :CheckBox?

checkbox - Vuetify数据表选择所有禁用复选框

javascript - 在 Odoo 9 中一次上传多个附件

jquery - 如何从多选列表框中获取选定的项目以使其被选中?

多选 Jetbrains Webstorm

java - SQLite Android 多选Args 一个选择参数

java - 'RealmNoticeModelClass' 有一个主键,使用 'createObject(Class<E>, Object)' 代替

java - 使用 RxJava 从 3 个不同的网站同步获取数据

css - 自定义复选框隐藏背景和边框