android - 如何在 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)));
}
}
提前谢谢你!
解决方案
使用接口作为单选按钮单击的侦听器。
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()))
}
}
});
}
此代码未经测试,但我认为它提供了整体流程。
推荐阅读
- python - 将数据保存到模型的问题。错误:禁止保存()以防止由于未保存的相关对象而导致数据丢失
- azure - 在域中使用 VisualStudio 2019 pro
- plotly.js - 在我的 html 网页中绘制的图表根本没有呈现
- java - 如何在 Spring Boot 或 Java 中为变量验证创建验证实用程序
- github - 在 Slack 上使用 Github App 取消订阅回购
- elasticsearch - 弹性搜索未返回附近输入日期的记录
- spring - Feign客户端日志级别干预pdf二进制内容
- r - 计算字母到数字和数字到字母的转换
- python - 删除 0 并在 pandas 的每个数字中添加“”
- angular - 角度多点滑块的建议