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

如何使用Kotlin在RecyclerView末尾添加按钮

RecyclerView末尾添加按钮实现方案

通过Adapter多视图类型实现即可,不需要额外嵌套布局,滑动时按钮会跟随列表固定在内容底部显示,具体修改如下:

    1. 新建按钮项布局
      创建布局文件rv_item_add_btn.xml,放入你需要的按钮控件,示例代码:
<?xml version="1.0" encoding="utf-8"?>
<Button
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/btnAddPlayer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="16dp"
    android:text="添加新玩家"/>
    1. 修改Adapter代码,增加多类型支持
      首先在MyAdapter中定义两种视图类型常量,重写几个核心方法,注意Adapter继承的ViewHolder泛型要改为通用的RecyclerView.ViewHolder:
class MyAdapter(private val myList: List<Player>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    // 视图类型常量
    private val TYPE_ITEM = 0
    private val TYPE_BTN = 1

    override fun getItemCount(): Int {
        // 总长度是列表长度+1个按钮位
        return myList.size + 1
    }

    override fun getItemViewType(position: Int): Int {
        // 最后一个位置返回按钮类型
        return if (position == myList.size) TYPE_BTN else TYPE_ITEM
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        val inflater = LayoutInflater.from(parent.context)
        return when (viewType) {
            TYPE_ITEM -> {
                val view = inflater.inflate(R.layout.view_for_rv, parent, false)
                MyHolder(view)
            }
            else -> {
                val view = inflater.inflate(R.layout.rv_item_add_btn, parent, false)
                AddBtnHolder(view)
            }
        }
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        when (holder) {
            is MyHolder -> {
                // 普通列表项正常绑定数据
                val item = myList[position]
                holder.bind(item)
            }
            is AddBtnHolder -> {
                // 按钮绑定点击事件
                holder.itemView.setOnClickListener {
                    // 此处填写按钮点击后的业务逻辑
                }
            }
        }
    }
}
    1. 新增按钮对应的ViewHolder类
      不需要额外绑定逻辑,直接继承基础ViewHolder即可:
class AddBtnHolder(view: View) : RecyclerView.ViewHolder(view)

注意:你当前MainActivity中每次livedata数据回调都重新创建Adapter实例会造成性能浪费,可以提前初始化Adapter,数据更新时调用Adapter的notifyDataSetChanged()方法刷新列表即可,不修改也不会影响按钮功能的正常运行。

内容的提问来源于stack exchange,提问作者M.hossein Karimi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:06:22