以编程方式根据数组添加单选按钮

时间:2020-04-30 20:12:29

标签: android

我想在问题中添加单选按钮作为回答选项,但是必须在代码上添加这些单选按钮,因为选项的数量取决于每个项目。这些作为多选答案选项并不总是局限于一个选项,有时甚至可以更改为两个或多个选项。

我正在recyclerView中进行此操作,有没有一种方法可以添加它们而不需要加入无线电组,以便能够在需要时选择多个按钮?

2 个答案:

答案 0 :(得分:0)

如果您不介意使用复选框,我可能会选择这种方法。

您可以引入Answer模型类,并在Checkbox的{​​{1}}上添加带有OnCheckedChangeListener的{​​{1}}:

RecyclerView.Adapter
ViewHolder

创建答案列表后,可以将其传递到public class Answer { private String text; private boolean isChecked; // Constructor, Getters, Setters } 。 (有关如何更新数据的更多信息,请参阅官方documentation

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {

    private static final int MAX_ANSWERS = 2;

    private List<Answer> mData;
    private Context context;

    MyRecyclerViewAdapter(List<Answer> data, Context context) {
        this.mData = data;
        this.context = context;
    }

    // ...

    static class ViewHolder extends RecyclerView.ViewHolder {
        CheckBox checkAnswer;
        TextView myTextView;

        ViewHolder(View itemView) {
            super(itemView);
            checkAnswer = itemView.findViewById(R.id.check_answer);
            myTextView = itemView.findViewById(R.id.txt_answer);
        }
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Answer answer = mData.get(position);
        holder.myTextView.setText(answer.getText());
        holder.checkAnswer.setOnCheckedChangeListener((v, isChecked) -> {
            answer.setChecked(isChecked);
            // Notify adapter so that onBindViewHolder is called 
            notifyDataSetChanged();
        });

        // Check whether maximum number of answers is reached
        if (mData.stream().filter(Answer::isChecked).count() >= MAX_ANSWERS) {
            holder.checkAnswer.setEnabled(holder.checkAnswer.isChecked());
        } else {
            holder.checkAnswer.setEnabled(true);
        }
    }

    // ...
}

每当提交答案时,您都可以过滤已检查答案的列表:

RecyclerView.Adapter

答案 1 :(得分:0)

您可以使用android的内置对话框轻松完成此操作。请参阅here是Android的官方文档。