Single selection in RecyclerView

后端 未结 15 1090
深忆病人
深忆病人 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 16:01

    It's quite late, but I'm still posting it as it may help someone else.

    Use the code below as a reference to check a single item in RecyclerView:

    /**
     * Created by subrahmanyam on 28-01-2016, 04:02 PM.
     */
    public class SampleAdapter extends RecyclerView.Adapter {
    
        private final String[] list;
        private int lastCheckedPosition = -1;
    
        public SampleAdapter(String[] list) {
            this.list = list;
        }
    
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = View.inflate(parent.getContext(), R.layout.sample_layout, null);
            ViewHolder holder = new ViewHolder(view);
            return holder;
        }
    
        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {
            holder.choiceName.setText(list[position]);
            holder.radioButton.setChecked(position == lastCheckedPosition);
        }
    
        @Override
        public int getItemCount() {
            return list.length;
        }
    
        public class ViewHolder extends RecyclerView.ViewHolder {
            @Bind(R.id.choice_name)
            TextView choiceName;
            @Bind(R.id.choice_select)
            RadioButton radioButton;
    
            public ViewHolder(View itemView) {
                super(itemView);
                ButterKnife.bind(this, itemView);
                radioButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        int copyOfLastCheckedPosition = lastCheckedPosition;
                lastCheckedPosition = getAdapterPosition();
                notifyItemChanged(copyOfLastCheckedPosition);
                notifyItemChanged(lastCheckedPosition);
    
                    }
                });
            }
        }
    }
    

提交回复
热议问题