Я борюсь с этой проблемой некоторое время.Когда я проверяю кнопку в первой группе, затем прокручиваю вниз, затем возвращаюсь к первой, первая группа не проверяется.Затем я попытался удалить setChecked(false)
строк, затем проблема изменилась.Когда я проверил первую группу, то прокрутил вниз и восьмую проверили.Я не представляю, как я могу решить эти проблемы.
public ViewAdapter(Context context, ArrayList<QuestionBox> listOfQuestions){
this.context = context;
mDataset = listOfQuestions;
numberOfItems = mDataset.size() + 2;
}
public class HeaderViewHolder extends RecyclerView.ViewHolder{
@BindView(R.id.G_code_instruction)
TextView instruction;
public HeaderViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public class FooterViewHolder extends RecyclerView.ViewHolder{
@BindView(R.id.greenButton)
Button greenButton;
public FooterViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public class ItemViewHolder extends RecyclerView.ViewHolder{
@BindView(R.id.question)
TextView questionText;
@BindView(R.id.radioGroup)
RadioGroup answerGroup;
@BindView(R.id.first)
RadioButton button1;
@BindView(R.id.second)
RadioButton button2;
@BindView(R.id.third)
RadioButton button3;
@BindView(R.id.fourth)
RadioButton button4;
public ItemViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
public void setGroup(QuestionBox currentBox, final int position){
button1.setText(currentBox.getAllAnswers().get(0));
button2.setText(currentBox.getAllAnswers().get(1));
button3.setText(currentBox.getAllAnswers().get(2));
button4.setText(currentBox.getAllAnswers().get(3));
switch (mDataset.get(position - 1).getState()) {
case 0:
button1.setChecked(true);
break;
case 1:
button2.setChecked(true);
break;
case 2:
button3.setChecked(true);
break;
case 3:
button4.setChecked(true);
break;
case -1: button1.setChecked(false);
button2.setChecked(false);
button3.setChecked(false);
button4.setChecked(false);
break;
}
final int id1 = button1.getId();
final int id2 = button2.getId();
final int id3 = button3.getId();
final int id4 = button4.getId();
answerGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == id1){
mDataset.get(position-1).setState(0);
}else if (checkedId == id2){
mDataset.get(position - 1).setState(1);
}else if (checkedId == id3){
mDataset.get(position - 1).setState(2);
}else if (checkedId == id4){
mDataset.get(position - 1).setState(3);
}
}
});
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == HEADER_VIEW){
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listview_header, parent, false);
return new HeaderViewHolder(view);
}else if (viewType == ITEM_VIEW){
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.test_question_box, parent, false);
return new ItemViewHolder(view);
}else if (viewType == FOOTER_VIEW){
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listview_footer, parent, false);
return new FooterViewHolder(view);
}else {
return null;
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof HeaderViewHolder){
HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder;
headerViewHolder.instruction.setText(R.string.G_code_instruction);
}else if (holder instanceof FooterViewHolder){
FooterViewHolder footerViewHolder = (FooterViewHolder) holder;
footerViewHolder.greenButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "Működik", Toast.LENGTH_LONG).show();
}
});
}else if (holder instanceof ItemViewHolder){
ItemViewHolder itemViewHolder = (ItemViewHolder) holder;
QuestionBox currentBox = (QuestionBox) mDataset.get(position - 1 );
itemViewHolder.questionText.setText(currentBox.getQuestion());
itemViewHolder.setGroup( currentBox, position);
}
}
@Override
public int getItemCount() {
return mDataset.size() + 2;
}
@Override
public int getItemViewType(int position) {
if (position == 0) {
return HEADER_VIEW;
} else if (position == numberOfItems - 1){
return FOOTER_VIEW;
}else{
return ITEM_VIEW;
}
}
}