📜  在 recyclerview 中更改所选项目的背景颜色 - Java (1)

📅  最后修改于: 2023-12-03 15:23:18.493000             🧑  作者: Mango

在 recyclerview 中更改所选项目的背景颜色 - Java

在开发过程中,我们经常需要在RecyclerView中更改所选项目的背景颜色。在本文中,我们将会介绍如何实现这个功能。

实现步骤
  1. 首先,在RecyclerView的adapter中,我们需要定义一个全局变量用于存储被选中的位置。

    private int mSelectedPosition = -1;
    
  2. 我们将在RecyclerView的ViewHolder中监听item的点击事件。在点击事件中,我们需要设置被选中的位置,并通知RecyclerView进行更新。

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int currentPosition = holder.getAdapterPosition();
            if (mSelectedPosition != currentPosition) {
                mSelectedPosition = currentPosition;
                notifyDataSetChanged();
            }
        }
    });
    
  3. 在adapter中重写getItemViewType方法,判断当前item是否是被选中的item,并返回不同的viewType。在onCreateViewHolder中根据不同的viewType,创建不同的ViewHolder,在onBindViewHolder中设置被选中item的背景颜色。

    @Override
    public int getItemViewType(int position) {
        return position == mSelectedPosition ? 1 : 0;
    }
    
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == 1) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.selected_item_layout, parent, false);
            return new SelectedViewHolder(view);
        } else {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.normal_item_layout, parent, false);
            return new NormalViewHolder(view);
        }
    }
    
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        if (holder.getItemViewType() == 1) {
            holder.itemView.setBackgroundColor(ContextCompat.getColor(mContext, R.color.selected_item_color));
        } else {
            holder.itemView.setBackgroundColor(ContextCompat.getColor(mContext, R.color.normal_item_color));
        }
    }
    
总结

通过以上三个步骤,我们可以在RecyclerView中实现选中item更改背景颜色的效果。其中,重点是要注意在adapter中正确地处理item的点击事件,以及正确地返回不同的viewType并创建不同的ViewHolder。