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

如何创建预定义10个条目的动态RecyclerView 实现点击替换功能

RecyclerView点击替换条目实现方案

核心逻辑

  • 页面初始化时构造长度为10的列表数据源,数据源索引从0开始,对应位置的条目值为索引值+1,刚好匹配1-10的序号展示要求
  • 为每个列表条目绑定点击监听,用户点击对应条目时,直接修改数据源中该位置的内容为「用户项」,调用适配器局部刷新方法更新单条目即可,无需全局刷新列表

代码实现

1. 主页面布局 activity_main.xml

页面仅需放置一个RecyclerView控件承载列表:

<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rv_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"/>

2. 单条目布局 item_list.xml

用简单TextView展示条目内容即可:

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tv_item"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:gravity="center_vertical"
    android:textSize="16sp"
    android:layout_marginBottom="8dp"/>

3. 列表适配器实现

class ListAdapter : RecyclerView.Adapter<ListAdapter.ListViewHolder>() {
    // 初始化10条数据,内容为1-10的序号
    private val dataList = MutableList(10) { (it + 1).toString() }

    inner class ListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val tvContent: TextView = itemView.findViewById(R.id.tv_item)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ListViewHolder {
        val itemView = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_list, parent, false)
        return ListViewHolder(itemView)
    }

    override fun onBindViewHolder(holder: ListViewHolder, position: Int) {
        holder.tvContent.text = dataList[position]
        // 绑定条目点击事件
        holder.itemView.setOnClickListener {
            val clickPosition = holder.bindingAdapterPosition
            // 规避条目动画过程中位置无效的问题
            if (clickPosition != RecyclerView.NO_POSITION) {
                // 替换当前位置内容为用户项
                dataList[clickPosition] = "用户项"
                // 仅刷新被点击的条目,性能最优
                notifyItemChanged(clickPosition)
            }
        }
    }

    override fun getItemCount(): Int = dataList.size
}

4. 主页面逻辑 MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val recyclerView = findViewById<RecyclerView>(R.id.rv_list)
        // 配置垂直线性布局管理器
        recyclerView.layoutManager = LinearLayoutManager(this)
        // 绑定适配器
        recyclerView.adapter = ListAdapter()
    }
}

运行效果

  • 首次进入页面,列表从上到下依次展示1、2……10共10个初始条目,序号和条目位置一一对应
  • 点击任意条目,该条目原有序号会直接替换为用户项,其余条目状态不受影响
  • 单条目局部刷新不会触发整个列表重绘,滑动、点击操作无卡顿

内容的提问来源于stack exchange,提问作者Sandeep Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:57:23