我正在用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的布局以使其看起来像复选框吗?在这种情况下,最佳实践是什么?
非常感谢!
答案 0 :(得分:1)
您可以尝试使用此库https://github.com/xeoh/CheckBoxGroup
希望这会有所帮助!
答案 1 :(得分:0)
您可以使用ViewGroup
之类的LinearLayout
将CheckBox
分组在一起,并为您的课程实现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;
}
}
}