// аналогично добавляем слушателей ко всем переключателям:

я есть RecyclerView с RadioButton. Я просто хочу выбрать один RadioButton не много одновременно, и мой код заставляет его работать нормально, но когда я повторяю выбор сверху вниз, выбор исчезает, как я могу это исправить, пожалуйста, спасибо.

private RadioButton lastCheckedRB = null;

 @Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
    ContactUsModel contactUsModel = orderList.get(position);
    holder.orderNum.setText(contactUsModel.getOrderNum());
    holder.orderCost.setText(contactUsModel.getOrderCost());

    holder.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
            RadioButton checked_rb = (RadioButton) group.findViewById(checkedId);

            if (lastCheckedRB != null &&lastCheckedRB.isChecked()) {
                lastCheckedRB.setChecked(false);
            }
            //store the clicked radiobutton
            lastCheckedRB = checked_rb;


        }
    });

Ответы на вопрос(4)

orderList

например:isSelected = false;

Убедитесь, что это добавлено во все объекты вашегоarrayList

Когда вы выбираете любую радиокнопку, просто обновите текущую позициюorderList isSelected = true и оставшиесяisSelected = false;

и позвонитьnotifyDataSetChanged()

также убедитесь, что вы проверяете

if(isSelcted)
redioButton.setChecked(true);
else
redioButton.setChecked(false);

например: if (csSelectedAddressPos == position) holder.radioBtn.setChecked (true); else holder.radioBtn.setChecked (false);

        holder.radioBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //set object isChecked here 
                csSelectedAddressPos = position;
                notifyDataSetChanged();
            }
        });

Вам не нужно сохранять позицию сTag или перезагрузить список сnotifyDataSetChanged(), Просто используйтеcheckedRadioButton и переключить его. Тогда вы можете использоватьcheckedRadioButton чтобы получить выбранный предмет.

private var checkedRadioButton: CompoundButton? = null

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder.itemView.radio_button.setOnCheckedChangeListener(checkedChangeListener)
    if (holder.itemView.radio_button.isChecked) checkedRadioButton = holder.itemView.radio_button
}

private val checkedChangeListener = CompoundButton.OnCheckedChangeListener { compoundButton, isChecked ->
    checkedRadioButton?.apply { setChecked(!isChecked) }
    checkedRadioButton = compoundButton.apply { setChecked(isChecked) }
}

1-й: получить индивидуальный идентификатор радио кнопки..

скажем у вас есть 6 радио кнопок:

{



radioButton1.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        radioButton1.setChecked(true);
                        radioButton2.setChecked(false);
                        radioButton3.setChecked(false);
                        radioButton4.setChecked(false);
                        radioButton5.setChecked(false);
                        radioButton6.setChecked(false);
                    }
                });

// аналогично добавляем слушателей ко всем переключателям:

radioButton2.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        radioButton2.setChecked(true);
                        radioButton1.setChecked(false);
                        radioButton3.setChecked(false);
                        radioButton4.setChecked(false);
                        radioButton5.setChecked(false);
                        radioButton6.setChecked(false);
                    }
                });


}

используя RadioButton, я просто пишу без проверки, но это подсказка для вас -

 private CompoundButton lastCheckedRB = null;

@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
    ContactUsModel contactUsModel = orderList.get(position);
    holder.orderNum.setText(contactUsModel.getOrderNum());
    holder.orderCost.setText(contactUsModel.getOrderCost());
    holder.readioBtn.setOnCheckedChangeListener(ls);
    holder.readioBtn.setTag(position);
}

private OnCheckedChangeListener ls = (new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView,
                                 boolean isChecked) {
        int tag = (int) buttonView.getTag();
        ;
        if (lastCheckedRB == null) {
            lastCheckedRB = buttonView;
        } else if (tag != (int) lastCheckedRB.getTag()) {
            lastCheckedRB.setChecked(false);
            lastCheckedRB = buttonView;
        }

    }
});
 hossam rakha21 сент. 2017 г., 15:12
спасибо большое что работает :)
 Nikita Vishwakarma19 дек. 2018 г., 13:37
Сэкономил мое время .. спасибо
 Sanjay Kumar26 сент. 2017 г., 17:23
Мне понравится, если вы проголосуете за это :)

Ваш ответ на вопрос