android中单选按钮选择的重复


public class Quiz_adapter extends RecyclerView.Adapter<Quiz_adapter.QuizViewHolder> {
private final Context mCtx;
private final List<Quiz> quizList;
public Quiz_adapter(Context mCtx, List<Quiz> quizList) {
this.mCtx = mCtx;
this.quizList = quizList;
}
@NotNull
@Override
public Quiz_adapter.QuizViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(mCtx);
@SuppressLint("InflateParams") View view = inflater.inflate(R.layout.cardview_quiz, null,false);
view.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT));
return new Quiz_adapter.QuizViewHolder(view);
}
@Override
public void onBindViewHolder(QuizViewHolder holder, int position) {
Quiz quiz = quizList.get(position);
holder.txtquestion.setText(quiz.getQn());
holder.rb_option1.setText(quiz.getOpt1());
holder.rb_option2.setText(quiz.getOpt2());
if(quiz.getOpt3().equals("")){
holder.rb_option3.setVisibility(View.GONE);
}else{
holder.rb_option3.setText(quiz.getOpt3());
}
if(quiz.getOpt4().equals("")){
holder.rb_option4.setVisibility(View.GONE);
}else{
holder.rb_option4.setText(quiz.getOpt4());
}
holder.rg_option.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
//int radio =  radioGroup.getCheckedRadioButtonId();
if (radioGroup.getCheckedRadioButtonId() == -1)
{
// no radio buttons are checked
Toast.makeText(mCtx,"No Option is selected", Toast.LENGTH_SHORT).show();
}
else
{
if(i == R.id.rb_option1){
quiz.setAns(1);
notifyDataSetChanged();
}if(i == R.id.rb_option2){
quiz.setAns(2);
notifyDataSetChanged();
}if(i == R.id.rb_option3){
quiz.setAns(3);
notifyDataSetChanged();
}if(i == R.id.rb_option4){
quiz.setAns(4);
notifyDataSetChanged();
}
// one of the radio buttons is checked
Quiz quiz1=new Quiz(quiz.getId(),quiz.getQn(),quiz.getOpt1(),quiz.getOpt2(),quiz.getOpt3(),quiz.getOpt4(),quiz.getAns());
//here I am storing answer in shared preference to send on server.
Apref.getInstance(mCtx).addUpdateShoppingCartList(quiz1);
}
}
});
}
@Override
public int getItemCount() {
return quizList.size();
}
public static class QuizViewHolder extends RecyclerView.ViewHolder {
TextView txtquestion;
RadioGroup rg_option;
RadioButton rb_option1,rb_option2,rb_option3,rb_option4;
RelativeLayout llquiz;
QuizViewHolder(View itemView) {
super(itemView);
llquiz=itemView.findViewById(R.id.llquiz);
txtquestion=itemView.findViewById(R.id.txtquestion);
rg_option = itemView.findViewById(R.id.rg_option);
rb_option1 = itemView.findViewById(R.id.rb_option1);
rb_option2 = itemView.findViewById(R.id.rb_option2);
rb_option3 = itemView.findViewById(R.id.rb_option3);
rb_option4 = itemView.findViewById(R.id.rb_option4);
}
}
}

上面是我的QuizAdapter类代码。我在QuizActivity类中遇到了一个逻辑错误,即如果我为第一个问题选择选项1,它会自动为第九个问题选择相同的选项。只有当问题数量超过5时才会发生这种情况。我正在尝试查找错误,但无法执行此操作。

帮我解决这个问题。

提前谢谢。

这可能不是逻辑错误,而是RecyclerView的回收行为。所以它最终会回收你的RadioButton的状态。您需要告诉适配器,所有项目都是不同的,它们应该通过覆盖适配器中的getItemViewType来保持其选择状态。

@Override
public int getItemViewType(int position) {
return position;
}

最新更新