RadioGroup с RecyclerVIew - соответствующая проверка - PullRequest
0 голосов
/ 13 июня 2018

Я борюсь с этой проблемой некоторое время.Когда я проверяю кнопку в первой группе, затем прокручиваю вниз, затем возвращаюсь к первой, первая группа не проверяется.Затем я попытался удалить 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;
    }
}

}

1 Ответ

0 голосов
/ 13 июня 2018

Вы пытаетесь добавить default к switch

default:
       button1.setChecked(false); 
       button2.setChecked(false);
       button3.setChecked(false);
       button4.setChecked(false);
    break;
...