You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 02:02:28