首页 > 解决方案 > 如何在 android 的 RecyclerView 中从 radiogroup 中选择一个单选按钮?

问题描述

所以我想创建这个活动,其中每个问题有 10 个问题和 5 个答案。
像这样 - UI recyclerview

我想得到用户为每个问题选择的答案,比如 q01 - 4 和 q02 - 2 一样明智。我是开发新手,所以我不知道怎么做?谁能帮我?

这是我的适配器类,

public class DailyQuestionAdapter extends RecyclerView.Adapter<DailyQuestionAdapter.ViewHolder> {
 private ArrayList<DailyQuestionModel> questionList;

public DailyQuestionAdapter(ArrayList<DailyQuestionModel> questionList){
    this.questionList = questionList;
}


@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View questionView = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_daily, parent, false);
    return new ViewHolder(questionView);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    String question = questionList.get(position).getQuestion();
    holder.questionText.setText(question);
}

@Override
public int getItemCount() {
    return questionList.size();
}

public class ViewHolder extends RecyclerView.ViewHolder{

    public TextView questionText;
    public RadioGroup answers;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);

        questionText = itemView.findViewById(R.id.daily_question_textview);
        answers = itemView.findViewById(R.id.daily_answer);

    }
}

这是我的主要课程,

public class DailyQuestionsActivity extends AppCompatActivity {
 private ArrayList<DailyQuestionModel> questionList;
 private RecyclerView recyclerView;

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

    recyclerView = findViewById(R.id.daily_question_recycler);
    questionList = new ArrayList<>();

    setQuestion();
    setAdapter();
}

private void setAdapter() {
    DailyQuestionAdapter adapter = new DailyQuestionAdapter(questionList);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(adapter);
}

private void setQuestion() {
    questionList.add(new DailyQuestionModel(getResources().getString(R.string.q01)));
    questionList.add(new DailyQuestionModel(getResources().getString(R.string.q02)));
    questionList.add(new DailyQuestionModel(getResources().getString(R.string.q03)));
    questionList.add(new DailyQuestionModel(getResources().getString(R.string.q04)));
    questionList.add(new DailyQuestionModel(getResources().getString(R.string.q05)));
    questionList.add(new DailyQuestionModel(getResources().getString(R.string.q06)));
    questionList.add(new DailyQuestionModel(getResources().getString(R.string.q07)));
    questionList.add(new DailyQuestionModel(getResources().getString(R.string.q08)));
    questionList.add(new DailyQuestionModel(getResources().getString(R.string.q09)));
    questionList.add(new DailyQuestionModel(getResources().getString(R.string.q10)));
}
}

提前谢谢你!

标签: androidandroid-studioandroid-recyclerviewradio-buttonradio-group

解决方案


使用接口作为单选按钮单击的侦听器。

public interface AnswerSelectedListener {
    void answerSelected(String answer);
}

将 AnswerSelectedListener 类属性添加到 DailyQuestionModel 类和构造函数,并将此接口的实现传递给每个 DailyQuestionModel:

questionList.add(new DailyQuestionModel(
    getResources().getString(R.string.q01),
    new AnswerSelectedListener() {
        @Override
        public void answerSelected(String answer) {
            //Here you have the selected answer to question 01
        }
    })
)

在 RecyclerView 适配器内部,在选择答案时调用此侦听器:

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    final DailyQuestionModel model = questionList.get(position);
    String question = model.getQuestion();
    holder.questionText.setText(question);
    answers.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            RadioButton checkedRadioButton = (RadioButton)group.findViewById(checkedId);
            boolean isChecked = checkedRadioButton.isChecked();
            if (isChecked) {
                model.answerListener.answerSelected(checkedRadioButton.getText()))
            }
        }
    });
}

此代码未经测试,但我认为它提供了整体流程。


推荐阅读