Android — один RadioButton в RecyclerView

У меня есть RecyclerView с элементом, который содержит только RadioButton, мой адаптер создает RecyclerView с некоторыми позициями - может быть 5-10 позиций с RadioButton в каждой позиции. Но эти RadioButtons не находятся в одной RadioGroup, потому что все они находятся в разных позициях RecyclerView. Есть ли способ установить для него одиночный выбор?

PS: я нашел это Выберите только один переключатель в recyclerview, но все дело в RadioGroups в позициях RecyclerView, у меня только RadioButtons.


person Den    schedule 11.07.2017    source источник


Ответы (2)


Вы можете управлять им, создав класс модели с boolean переменной isChecked.

когда вы выбираете RadioButton, сначала выполните isChecked = false для всех, а затем сделайте true для выбранной кнопки, а затем вызовите notifyDataSetChanged.

В адаптере используйте

radioButton.setChecked(list.get(position).isChecked())

Это поможет вам определенно.

person Vishal Chhodwani    schedule 11.07.2017
comment
что, если у нас есть более 100 или 1000 элементов в списке. - person Sanjay Kumar; 11.07.2017
comment
Да, я понял, но мой RecyclerView создан из ArrayList с определенными объектными моделями. - person Den; 11.07.2017
comment
@SanjayMajoka не будет никаких проблем, если в нем будет более 100 элементов. это самый простой способ, который вы можете сделать. есть еще один способ сохранить предыдущее представление и снять его раньше и проверить новый - person Vishal Chhodwani; 11.07.2017
comment
@Den затем возьмите новую переменную внутри ObjectModels и управляйте ею с помощью этого. - person Vishal Chhodwani; 11.07.2017
comment
@Den Используйте эту ссылку, она поможет вам больше stackoverflow.com/a/36930230/6676466. удерживая предыдущее представление radioButton. - person Vishal Chhodwani; 11.07.2017
comment
Спасибо, вроде у меня получилось :) - person Den; 11.07.2017

У меня такая же проблема. Следуя ответу Вишала Чходвани, я написал следующее решение, надеясь, что оно поможет другим читателям.

class MyRecycler extends RecyclerView.Adapter<MyRecycler.RecyclerViewHolder> {

    static class RecyclerViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.aRadioButton)
        RadioButton rb;

        public RecyclerViewHolder(View itemView, int viewType, final Context context) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        } 
    }

    private List<MyModel> list;
    private RadioButton selectedRadioButton;  

    // Constructor and other methods here...

    @Override
    public void onBindViewHolder(final MyRecycler.RecyclerViewHolder holder, int position) {

        RadioButton radioButton = holder.rb;
        radioButton.setChecked(list.get(position).isChecked());

        radioButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                // Set unchecked all other elements in the list, so to display only one selected radio button at a time 
                for(MyModel model: list)
                    model.setChecked(false);

                // Set "checked" the model associated to the clicked radio button
                list.get(position).setChecked(true);

                // If current view (RadioButton) differs from previous selected radio button, then uncheck selectedRadioButton
                if(null != selectedRadioButton && !v.equals(selectedRadioButton))
                    selectedRadioButton.setChecked(false);

                // Replace the previous selected radio button with the current (clicked) one, and "check" it
                selectedRadioButton = (RadioButton) v;
                selectedRadioButton.setChecked(true);                    

        });
    }
}
person s.dallapalma    schedule 02.12.2017