Android之RecyclerView的item点击变色,再次点击取消变色

        如题,点击item,item变色,并在item的上显示一个勾,再次点击item,item恢复原来的颜色,并且勾去掉。其实逻辑挺简单的,但当时想了很久,就记录下来了,毕竟小白一个。布局什么的就 不写了,很简单,主要是adapter的部分如下所示,其中List<Boolean> mAudioFileSelectedList初始值均为false。

class AudioFileAdapter extends RecyclerView.Adapter<AudioFileAdapter.ViewHolder> {
        private List<AudioFileContent> mAudioFileContentList;
        private List<Boolean> mAudioFileSelectedList;
        private int selectedAudioFilePosition;

        AudioFileAdapter(List<AudioFileContent> audioFileContents, List<Boolean> audioFileSelectedList, int selectionPosition) {
            mAudioFileContentList = audioFileContents;
            mAudioFileSelectedList = audioFileSelectedList;
            selectedAudioFilePosition = selectionPosition;
        }

        @NonNull
        @Override
        public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_audio_file_item, parent, false);
            final ViewHolder holder = new ViewHolder(view);
            holder.mAudioFileItem.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    selectedAudioFilePosition = holder.getAdapterPosition();
                    for(int i = 0; i < mAudioFileSelectedList.size(); i++) {
                        if (i == selectedAudioFilePosition) {
                            if(mAudioFileSelectedList.get(selectedAudioFilePosition)) {
                                mAudioFileSelectedList.set(selectedAudioFilePosition, false);
                            }else {
                                mAudioFileSelectedList.set(selectedAudioFilePosition, true);
                            }
                        }else {
                            mAudioFileSelectedList.set(i, false);
                        }
                    }
                    notifyDataSetChanged();
                }
            });
            return holder;
        }

        @Override
        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
            AudioFileContent audioFileContent = mAudioFileContentList.get(position);
            holder.mAudioFileItemName.setText(audioFileContent.getAudioName());
            if (selectedAudioFilePosition == position) {
                if (mAudioFileSelectedList.get(position)) {
                    holder.mAudioFileItemSelection.setVisibility(View.VISIBLE);
                    holder.mAudioFileItemLayout.setBackgroundColor(Color.parseColor("#E5F4FF"));

                } else {
                    holder.mAudioFileItemSelection.setVisibility(View.GONE);
                    holder.mAudioFileItemLayout.setBackgroundColor(Color.parseColor("#FFFFFF"));

                }
            } else {
                holder.mAudioFileItemSelection.setVisibility(View.GONE);
                holder.mAudioFileItemLayout.setBackgroundColor(Color.parseColor("#FFFFFF"));
            }
            

        @Override
        public int getItemCount() {
            return mAudioFileContentList.size();
        }

        class ViewHolder extends RecyclerView.ViewHolder {
            @BindView(R.id.audio_file_item_layout)
            LinearLayout mAudioFileItemLayout;
            @BindView(R.id.audio_file_item)
            RelativeLayout mAudioFileItem;
            @BindView(R.id.audio_file_item_name)
            TextView mAudioFileItemName;
            @BindView(R.id.audio_file_item_selection)
            ImageView mAudioFileItemSelection;

            ViewHolder(View itemView) {
                super(itemView);
                ButterKnife.bind(this, itemView);
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/u014611408/article/details/83384998