有什么办法在Android中实现“复选框组”(例如RadioButton组)?

时间:2018-06-27 18:17:04

标签: android android-checkbox

我正在用android开发类似测验的应用程序。每个问题都是一个回收者视图项,因此我可以依次显示多个问题类型。我的问题是:有没有办法像RadioButton组那样实现CheckBox组?通过RadioButton组,我可以通过简单地调用以下命令来添加答案(RadioButton的):

RadioGroup radioGroup = view.findViewById(R.id.answer_grp);
RadioButton rb = new RadioButton("context...");
rb.setText("text");
radioGroup.addView(rb);

是否有与此类似的Checkbox组的任何实现?我应该使用提供的RadioButton组的实现并自定义RadioButton的布局以使其看起来像复选框吗?在这种情况下,最佳实践是什么?

非常感谢!

Radio button group I'm using

2 个答案:

答案 0 :(得分:1)

您可以尝试使用此库https://github.com/xeoh/CheckBoxGroup

希望这会有所帮助!

答案 1 :(得分:0)

您可以使用ViewGroup之类的LinearLayoutCheckBox分组在一起,并为您的课程实现CompoundButton.OnCheckedChangeListener来处理已检查的更改事件:

public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
    CheckBox q1A1CheckBox;
    CheckBox q1A2CheckBox;
    CheckBox q1A3CheckBox;
    CheckBox q1A4CheckBox;
    CheckBox q2A1CheckBox;
    CheckBox q2A2CheckBox;
    CheckBox q2A3CheckBox;
    CheckBox q2A4CheckBox;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        q1A1CheckBox = findViewById(R.id.main_q1_a1_checkBox);
        q1A2CheckBox = findViewById(R.id.main_q1_a2_checkBox);
        q1A3CheckBox = findViewById(R.id.main_q1_a3_checkBox);
        q1A4CheckBox = findViewById(R.id.main_q1_a4_checkBox);
        q2A1CheckBox = findViewById(R.id.main_q2_a1_checkBox);
        q2A2CheckBox = findViewById(R.id.main_q2_a2_checkBox);
        q2A3CheckBox = findViewById(R.id.main_q2_a3_checkBox);
        q2A4CheckBox = findViewById(R.id.main_q2_a4_checkBox);

        q1A1CheckBox.setOnCheckedChangeListener(this);
        q1A2CheckBox.setOnCheckedChangeListener(this);
        q1A3CheckBox.setOnCheckedChangeListener(this);
        q1A4CheckBox.setOnCheckedChangeListener(this);
        q2A1CheckBox.setOnCheckedChangeListener(this);
        q2A2CheckBox.setOnCheckedChangeListener(this);
        q2A3CheckBox.setOnCheckedChangeListener(this);
        q2A4CheckBox.setOnCheckedChangeListener(this);
    }

    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
        int currentCheckBoxGroupId = ((LinearLayout) compoundButton.getParent()).getId();

        switch (currentCheckBoxGroupId) {
            case R.id.main_q1_linearLayout:
                Toast.makeText(this, "Question one", Toast.LENGTH_SHORT).show();
                //do whatever you want

                break;

            case R.id.main_q2_linearLayout:
                Toast.makeText(this, "Question two", Toast.LENGTH_SHORT).show();
                //do whatever you want

                break;
        }
    }
}