如何基于mikepenz/fastAdapter搭建示例RecyclerView?求指导与代码
别发愁!我来一步步带你用fastAdapter搭建一个基础的RecyclerView示例,全程不用你没接触过的ButterKnife,用ViewBinding或者原生的findViewById就能搞定~
快速上手fastAdapter搭建RecyclerView
1. 先添加必要依赖
在你的Module级别的build.gradle(或者build.gradle.kts)文件中,添加fastAdapter和RecyclerView的依赖:
// RecyclerView 基础依赖 implementation "androidx.recyclerview:recyclerview:1.3.2" // fastAdapter 核心库(建议用最新版本号) implementation "com.mikepenz:fastadapter:5.7.0" // 如果用ViewBinding的话,记得在android块里开启: android { ... buildFeatures { viewBinding true } }
2. 创建自定义Item类
fastAdapter的核心是Item类,每个列表项对应一个Item。我们写一个简单的SimpleListItem,继承自AbstractItem,完全不用ButterKnife,用ViewBinding来绑定布局:
import com.mikepenz.fastadapter.items.AbstractItem import android.view.ViewGroup import android.view.LayoutInflater import com.yourpackage.databinding.ItemSimpleBinding // 替换成你的布局Binding类 class SimpleListItem( val itemId: Long, val title: String ) : AbstractItem<SimpleListItem.ViewHolder>() { // 每个Item的唯一类型标识 override val type: Int get() = R.id.simple_list_item // 返回Item对应的布局文件ID override val layoutRes: Int get() = R.layout.item_simple // 创建ViewHolder override fun createViewHolder(parent: ViewGroup): ViewHolder { val binding = ItemSimpleBinding.inflate(LayoutInflater.from(parent.context), parent, false) return ViewHolder(binding) } // 绑定数据到ViewHolder override fun bindView(holder: ViewHolder, payloads: List<Any>) { super.bindView(holder, payloads) holder.binding.tvTitle.text = title } // ViewHolder类,用ViewBinding持有布局控件 class ViewHolder(val binding: ItemSimpleBinding) : com.mikepenz.fastadapter.binding.BindingViewHolder<ItemSimpleBinding>(binding.root) }
对应的布局文件item_simple.xml:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:textSize="18sp"/>
3. 在Activity中配置RecyclerView
接下来在你的Activity里初始化RecyclerView,把fastAdapter整合进去:
import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.recyclerview.widget.LinearLayoutManager import com.mikepenz.fastadapter.FastAdapter import com.mikepenz.fastadapter.adapters.ItemAdapter import com.yourpackage.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) // 1. 配置RecyclerView的LayoutManager binding.recyclerView.layoutManager = LinearLayoutManager(this) // 2. 创建ItemAdapter,用于管理我们的列表数据 val itemAdapter = ItemAdapter<SimpleListItem>() // 3. 创建FastAdapter,把ItemAdapter关联进去 val fastAdapter = FastAdapter.with(itemAdapter) // 4. 生成测试数据 val testItems = mutableListOf<SimpleListItem>().apply { repeat(20) { add(SimpleListItem(it.toLong(), "列表项 $it")) } } // 5. 把数据添加到ItemAdapter itemAdapter.add(testItems) // 6. 把FastAdapter设置给RecyclerView binding.recyclerView.adapter = fastAdapter // 可选:添加点击事件 fastAdapter.onClickListener = { _, _, item, _ -> // 在这里处理Item点击逻辑,比如弹出Toast true // 返回true表示事件已处理 } } }
对应的Activity布局activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent"/> </androidx.constraintlayout.widget.ConstraintLayout>
关键说明
- 全程没有用到ButterKnife,用ViewBinding替代了控件绑定,这也是现在Android开发的推荐方式
ItemAdapter负责管理数据集合,FastAdapter负责处理RecyclerView的适配、点击事件、动画等核心逻辑- 如果不想用ViewBinding,也可以换成
findViewById,只需要修改ViewHolder的创建和绑定逻辑就行
这样跑起来就能看到一个带20个列表项的RecyclerView啦,点击事件也已经配置好,你可以根据自己的需求扩展数据模型和布局~
内容的提问来源于stack exchange,提问作者Stein.
相关产品推荐
相关产品推荐

