📅  最后修改于: 2023-12-03 15:23:18.493000             🧑  作者: Mango
在开发过程中,我们经常需要在RecyclerView中更改所选项目的背景颜色。在本文中,我们将会介绍如何实现这个功能。
首先,在RecyclerView的adapter中,我们需要定义一个全局变量用于存储被选中的位置。
private int mSelectedPosition = -1;
我们将在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();
}
}
});
在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。