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

RecyclerView中onBindViewHolder保存TextView选中状态问题求助

解决RecyclerView中TextView选中状态滚动后丢失的问题

这个问题在RecyclerView开发里太常见啦——核心原因就是RecyclerView的ViewHolder复用机制:当你滚动列表时,离开屏幕的ViewHolder会被重新拿来绑定新的列表项数据,如果没有单独保存选中状态,onBindViewHolder就会用字符串列表里的默认值覆盖你之前设置的选中状态。

下面是具体的解决步骤和代码示例:

1. 给Adapter添加选中状态存储集合

我们需要一个独立的集合来记录每个列表项的选中状态,和字符串列表的数据分开管理。比如用ArrayList<Boolean>:

public class YourAdapter extends RecyclerView.Adapter<YourAdapter.ViewHolder> {
    private List<String> mDataList;
    // 存储每个位置的选中状态,默认都是未选中(false)
    private List<Boolean> mSelectedStates;

    // Adapter构造函数
    public YourAdapter(List<String> dataList) {
        mDataList = dataList;
        // 初始化选中状态集合,和数据列表长度一致
        mSelectedStates = new ArrayList<>(Collections.nCopies(dataList.size(), false));
    }

    // ... 其他必要方法(比如onCreateViewHolder、getItemCount)

2. 在onBindViewHolder中根据保存的状态设置TextView

修改你的onBindViewHolder方法,不再直接依赖原始数据设置状态,而是从mSelectedStates里读取对应位置的状态:

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    // 设置TextView的文本内容
    holder.yourTextView.setText(mDataList.get(position));
    
    // 根据保存的选中状态设置TextView的selected状态
    holder.yourTextView.setSelected(mSelectedStates.get(position));

    // 给TextView设置点击事件,切换选中状态
    holder.yourTextView.setOnClickListener(v -> {
        // 切换当前位置的选中状态
        boolean newState = !mSelectedStates.get(position);
        mSelectedStates.set(position, newState);
        // 更新当前item的UI(或者用notifyItemChanged刷新)
        holder.yourTextView.setSelected(newState);
        // 如果需要触发UI刷新,也可以调用:notifyItemChanged(position);
    });
}

3. 额外注意事项

  • 如果你的字符串列表后续有添加/删除/更新操作,记得同步更新mSelectedStates集合,比如添加新item时,给mSelectedStates添加一个默认的false;删除item时,也要移除对应位置的状态记录,避免位置不匹配。
  • 如果你需要支持单选(只能选中一个item),那mSelectedStates可以改成存储当前选中的位置(比如Integer selectedPosition = -1),点击时先把之前选中的位置状态置为false,再设置当前位置为true,然后调用notifyItemChanged刷新两个位置的UI。

这样处理后,不管怎么滚动RecyclerView,每个item的选中状态都会被正确保留,不会被复用机制覆盖啦!

内容的提问来源于stack exchange,提问作者Usman Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:20:42