RecyclerView点击选中项时修改文本颜色的实现需求
RecyclerView选中项文本颜色修改方案(仅在onClick中实现)
你需要在onClick方法内同时处理选中项的文本颜色切换,以下是修改后的完整代码,所有颜色修改逻辑都集中在点击事件里,没有改动onBindViewHolder:
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> { public interface ListItemClickListener{ void onItemClick(View view, int position); } private final ArrayList<String> groups; private final ListItemClickListener mOnClickListener; View prevElement = null; /** * Provide a reference to the type of views that you are using * (custom ViewHolder) */ public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { private final TextView textView; public ViewHolder(@NonNull View v) { super(v); textView = v.findViewById(R.id.group_view); itemView.setOnClickListener(this); } @Override public void onClick(View v) { // 回调外部点击监听 if (mOnClickListener != null) { mOnClickListener.onItemClick(v, getLayoutPosition()); } // 恢复上一个选中项的背景和文本颜色 if (prevElement != null) { prevElement.setBackgroundColor(Color.TRANSPARENT); // 找到上一项的TextView,恢复默认文本颜色(这里用黑色示例,你可以换成自己的默认色) TextView prevTextView = prevElement.findViewById(R.id.group_view); prevTextView.setTextColor(Color.BLACK); } // 设置当前选中项的背景和文本颜色 v.setBackgroundColor(Color.CYAN); TextView currentTextView = v.findViewById(R.id.group_view); currentTextView.setTextColor(Color.WHITE); // 这里是选中后的文本颜色,可自行修改 prevElement = v; } public TextView getTextView() { return textView; } } /** * Initialize the dataset of the Adapter * * @param groups String[] containing the data to populate views to be used * by RecyclerView */ public CustomAdapter(ArrayList<String> groups,ListItemClickListener mOnClickListener) { this.groups = groups; this.mOnClickListener = mOnClickListener; } // Create new views (invoked by the layout manager) @NonNull @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { View view = LayoutInflater.from(viewGroup.getContext()) .inflate(R.layout.group_layout, viewGroup, false); return new ViewHolder(view); } // Replace the contents of a view (invoked by the layout manager) @Override public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int position) { String txt = groups.get(position); viewHolder.getTextView().setText(txt); } // Return the size of your dataset (invoked by the layout manager) @Override public int getItemCount() { return groups.size(); } }
关键修改说明:
- 在恢复上一个选中项背景色的同时,通过
findViewById(R.id.group_view)获取其内部的TextView,设置回默认文本颜色 - 在设置当前选中项背景色后,同样获取对应TextView,设置选中状态的文本颜色
- 所有修改逻辑都严格限制在
onClick方法内,完全符合你的要求,没有触碰onBindViewHolder的代码
内容的提问来源于stack exchange,提问作者jiija
相关产品推荐
相关产品推荐

