Возникла проблема с переключателем переключателя в обзоре - PullRequest
0 голосов
/ 10 февраля 2020

Итак, я перешел по этой ссылке для функции с одним щелчком мыши, используя переключатель в моем случае в обзоре переработчика. Работает почти нормально. Единственная проблема, которая возникает, когда вы дважды нажимаете на первый элемент в обзоре переработчика, всегда остается верной, даже если после этого вы пытаетесь ударить любой другой элемент. Ниже приведена логика c, которую я пытался реализовать.

private List<Profile> profileList;
private Context context;
private RadioButton lastChecked = null;
private int lastCheckedPos = 0;

public void onBindViewHolder(@NonNull MyHolder holder, int position) {
    Profile profile = profileList.get(position);
    holder.imgRadioButton.setChecked(profile.isSelected());
    holder.imgRadioButton.setTag(position);

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

            int clickpos = (Integer) holder.imgRadioButton.getTag();

            if (lastCheckedPos != clickpos) {
                if (holder.imgRadioButton.isChecked()) {

                    if (lastChecked != null) {
                        lastChecked.setChecked(false);
                        profileList.get(lastCheckedPos).setSelected(false);
                    }

                    lastChecked = holder.imgRadioButton;
                    lastCheckedPos = clickpos;

                } else {

                    lastChecked = null;

                }
                profileList.get(clickpos).setSelected(holder.imgRadioButton.isChecked());
            }
        }
    });
}

Не знаю, где это портит любую логику c. Но я хочу, чтобы это работало обычным образом, как работает радио-кнопка, но в обзоре переработчика.

1 Ответ

0 голосов
/ 11 февраля 2020

Вам нужно попробовать это.

Add   lastChecked.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    lastCheckededPos = getAdapterPosition();
                    notifyDataSetChanged();
                }
            });

to the ViewHolder() constructor.
Then use this in onBindViewHolder() method:

      // this condition un-checks previous selections
        holder.lastChecked.setChecked(lastCheckedPos == position);

Вот и все. Теперь ваш переключатель включен по одному, а выбор другого переключателя отменяет предыдущий выбор.

...