一 在编辑适配器之前,我们需要一个可以自己定制方法的ViewHolder。不废话 上代码 :
class MyHodler(var Itemview: View) : RecyclerView.ViewHolder(Itemview) {
// 设置字体方法 ,图片 ,显示隐藏,点击事件 都可以随意定制
//比如 settext方法
fun settext(id:Int,string: String) { //设置settext的方法 随项目需求自己定制内容
var textView= Itemview.findViewById<TextView>(id)
textView.text=string
}
}
二 适配器 我们把设置数据的方法暴露在调用处,方便于随时修改:
// layoutid:布局id , binhodel:内置接口 <T>泛型为数据类
class KmyAteder<T>(var layoutid: Int, var list: ArrayList<T>, var binmyhodel: BindmyInterface) : RecyclerView.Adapter<MyHodler>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): KoneHodler {
var infler = LayoutInflater.from(parent.context).inflate(layoutid, parent, false)
return KoneHodler(infler)
}
override fun getItemCount(): Int {
return list.size
}
override fun onBindViewHolder(holder: KoneHodler, position: Int) {
binmyhodel.binhod(holder, position)
}
interface BindmyInterface { //暴露接口
fun binhod(hodler: KoneHodler, position: Int)
}
}
三 调用 :
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initview()
}
private fun initview() {
val linearLaym = LinearLayoutManager(this, LinearLayout.VERTICAL, false)
recyclerView.layoutManager = linearLaym
val list: ArrayList<(bean对象)> = ArrayList()
for (i in 0..4) {
list.add((bean对象)) //测试数据
}
recyclerView.adapter = KmyAteder<(bean对象)>(R.layout.(item的布局id), list,
object : KoneAteder.BindhodleInterface {
override fun binhod(hodler: KoneHodler, position: Int) {
hodler.settext(R.id.(view的id), list[position])
}
})
}
}
四 缺点是不支持多布局,多布局的通用适配器以后更新>.<