Single selection in RecyclerView

后端 未结 15 1083
深忆病人
深忆病人 2020-11-22 15:15

I know there are no default selection methods in recyclerview class, But I have tried in following way,

public void onBindViewHolder(ViewHolder holder, final         


        
15条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-11-22 15:59

                public class GetStudentAdapter extends 
                RecyclerView.Adapter {
    
                private List getStudentList;
                Context context;
                RecyclerView recyclerView;
    
                public class MyViewHolder extends RecyclerView.ViewHolder {
                    TextView textStudentName;
                    RadioButton rbSelect;
    
                    public MyViewHolder(View view) {
                        super(view);
                        textStudentName = (TextView) view.findViewById(R.id.textStudentName);
                        rbSelect = (RadioButton) view.findViewById(R.id.rbSelect);
                    }
    
    
                }
    
                public GetStudentAdapter(Context context, RecyclerView recyclerView, List getStudentList) {
                    this.getStudentList = getStudentList;
                    this.recyclerView = recyclerView;
                    this.context = context;
                }
    
                @Override
                public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                    View itemView = LayoutInflater.from(parent.getContext())
                            .inflate(R.layout.select_student_list_item, parent, false);
                    return new MyViewHolder(itemView);
                }
    
                @Override
                public void onBindViewHolder(final MyViewHolder holder, final int position) {
                    holder.textStudentName.setText(getStudentList.get(position).getName());
                    holder.rbSelect.setChecked(getStudentList.get(position).isSelected());
                    holder.rbSelect.setTag(position); // This line is important.
                    holder.rbSelect.setOnClickListener(onStateChangedListener(holder.rbSelect, position));
    
                }
    
                @Override
                public int getItemCount() {
                    return getStudentList.size();
                }
                private View.OnClickListener onStateChangedListener(final RadioButton checkBox, final int position) {
                    return new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            if (checkBox.isChecked()) {
                                for (int i = 0; i < getStudentList.size(); i++) {
    
                                    getStudentList.get(i).setSelected(false);
    
                                }
                                getStudentList.get(position).setSelected(checkBox.isChecked());
    
                                notifyDataSetChanged();
                            } else {
    
                            }
    
                        }
                    };
                }
    
            }
    

提交回复
热议问题