滚动时单选按钮

问题描述 投票:0回答:2

我制作了一个RecyclerView,将32个问题和4个答案显示为RadioButton。当我单击单个单选按钮时,它可以工作,并且在选中它时会显示祝酒词。

但是当我滚动RecyclerView`时,它显示了吐司,就像我选中了一个单选按钮一样。

我该如何解决?

我的适配器:

public class sikapadapter extends RecyclerView.Adapter<sikapadapter.ViewHolder> {

    private int[] integer;
    String option[];
    private OnRadioChangeListener onRadioChangeListener;

    public sikapadapter(String[] option, OnRadioChangeListener onRadioChangeListener) {
        this.option = option;
        this.onRadioChangeListener = onRadioChangeListener;
        integer = new int[option.length];
    }

    interface OnRadioChangeListener{
        void onRadioChange(int position,int checkedId);
    }

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

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

        if(integer[position] == 1){
            holder.radio.check(R.id.radiobutton1);
        }else if(integer[position] == 2){
            holder.radio.check(R.id.radiobutton2);
        }else if(integer[position] == 3){
            holder.radio.check(R.id.radiobutton3);
        }else if(integer[position] == 4){
            holder.radio.check(R.id.radiobutton4);
        }else {
            holder.radio.clearCheck();
        }

        holder.text.setText(option[position]);

        holder.radio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if(onRadioChangeListener!=null){
                    if(checkedId == R.id.radiobutton1){
                        checkedId = 1;
                        integer[position] = 1;
                        onRadioChangeListener.onRadioChange(position,checkedId);
                    }

                    if(checkedId == R.id.radiobutton2){
                        checkedId = 2;
                        integer[position] = 2;
                        onRadioChangeListener.onRadioChange(position,checkedId);
                    }

                    if(checkedId == R.id.radiobutton3){
                        checkedId = 3;
                        integer[position] = 3;
                        onRadioChangeListener.onRadioChange(position,checkedId);
                    }

                    if(checkedId == R.id.radiobutton4){
                        checkedId = 4;
                        integer[position] = 4;
                        onRadioChangeListener.onRadioChange(position,checkedId);

                    }

                }
            }
        });


    }

    @Override
    public int getItemCount() {
        return option.length;
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        TextView text;
        RadioGroup radio;
        RadioButton radio1,radio2,radio3,radio4;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            text = itemView.findViewById(R.id.recytexttampil);
            radio = itemView.findViewById(R.id.radiogroup);
            radio1 = itemView.findViewById(R.id.radiobutton1);
            radio2 = itemView.findViewById(R.id.radiobutton2);
            radio3 = itemView.findViewById(R.id.radiobutton3);
            radio4 = itemView.findViewById(R.id.radiobutton4);


        }
    }
}

像这样-我从未检查过适配器位置19,但是滚动时会检查自身:

enter image description here

android android-recyclerview radio-button recycler-adapter radio-group
2个回答
0
投票

在设置onBindViewHolder()中的所选按钮之前,请先清除所有选中的按钮


0
投票

调用radio.check会触发任何OnCheckedChangeListener,因此,当为回收的ViewHolder调用onBindViewHolder时,将触发从上一个绑定附加的侦听器。

© www.soinside.com 2019 - 2024. All rights reserved.