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

如何在RecyclerView中使用字符串?点击列表项始终显示首个字符串问题

问题分析与解决办法

嘿,我一眼就看出问题出在哪了!你在onCreateViewHolder里用viewType去取mData.get(viewType),这完全搞错了viewType的用途啊!

viewType是用来区分不同类型的Item布局的,比如你的RecyclerView里有两种不同样式的条目时才会用到它,它绝对不是当前条目的位置索引。所以你现在的代码里,不管哪个条目被点击,拿到的都是viewType对应位置的数据(通常默认viewType是0,所以一直取的是ArrayList里的第一个元素),这就导致所有点击都只显示第一个字符串。

正确的做法:在onBindViewHolder中处理点击事件

onBindViewHolder才是每个条目绑定数据的地方,这里的position参数才是当前条目的真实位置,我们应该在这里获取对应的数据并设置点击事件:

先看修改后的完整代码示例:

1. 你的ViewHolder类(假设包含显示文本的控件)

public class ViewHolder extends RecyclerView.ViewHolder {
    TextView itemText;

    public ViewHolder(View itemView) {
        super(itemView);
        itemText = itemView.findViewById(R.id.tv_item_text); // 替换成你自己的控件ID
    }
}

2. 重写onCreateViewHolder(只负责创建ViewHolder,不要在这里处理数据和点击)

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(mContext).inflate(R.layout.cardview, parent, false);
    // 注意:这里不要设置点击事件,也不要获取mData里的数据
    return new ViewHolder(v);
}

3. 在onBindViewHolder中绑定数据+设置点击事件

@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
    // 这里通过position拿到当前条目的对应数据
    final ContentMain contentMain = mData.get(position);
    
    // 先把数据绑定到控件上(比如设置文本)
    holder.itemText.setText(contentMain.getYourTargetString()); // 替换成你自己的字符串获取方法
    
    // 给当前条目设置点击事件
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // 这里直接用当前条目的contentMain对象,就能拿到正确的字符串了
            Toast.makeText(v.getContext(), contentMain.getYourTargetString(), Toast.LENGTH_SHORT).show();
        }
    });
}

为什么这样改?

  • onCreateViewHolder只会在创建新的ViewHolder时调用(比如RecyclerView刚加载,或者条目滚出屏幕需要复用的时候),它不负责对应具体条目的数据。
  • onBindViewHolder会在每个条目需要显示数据时调用,这里的position就是当前条目的准确位置,拿到的数据自然是对的,点击时用这个数据就不会出错了。

这样修改后,你点击每个条目,就会显示对应位置的字符串啦!

内容的提问来源于stack exchange,提问作者Susan T. Erickson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:26:02