对recyclerview的简单封装

不多说,先直接上代码,看一下封装后的使用,避免写重复过多的代码(直接翻译为java代码也是一样的原理)

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var adapter = RecycleAdapter(this,initData()!! ,R.layout.recyclerview_item)
        recycler_view.layoutManager = LinearLayoutManager(this)
        recycler_view.adapter = adapter
        adapter.setOnBindViewHolder(object : RecycleAdapter.BindViewHolder<TestVar>{
            override fun onBind(p0: RecycleAdapter.MyViewHolder?, p1: Int, content: TestVar) {
                var test = p0!!.getView(R.id.name) as TextView
                var id = p0.getView(R.id.num) as TextView
                test.text = content.name
                id.setOnClickListener {   //添加监听事件
                    Log.d("tag","ididiididiid--------"+id)
                }
            }
        })
        adapter.addData(initData()!!)//再次添加数据
    }

    private fun initData(): ArrayList<TestVar>? {
        var list=ArrayList<TestVar>()
        for (i in 0..50){
            var test = TestVar(i.toString(),"测试"+i,R.mipmap.ic_launcher)
            list.add(i,test)
        }
        Log.d("tag","list.size------"+ list.size)
        return list
    }
}

recycleAdapter类

class RecycleAdapter<T> : RecyclerView.Adapter<RecycleAdapter.MyViewHolder> {
    var context:Context
    var list:ArrayList<T>
    var layout:Int? = null
    var bind:BindViewHolder<T>? = null
    constructor(context:Context,list:ArrayList<T>,layout:Int){
        this.context = context
        this.list = list
        this.layout = layout
        notifyDataSetChanged()
    }
    fun setOnBindViewHolder(bind:BindViewHolder<T>){
        this.bind = bind
    }

    fun addData(list:ArrayList<T>){
        if (list != null){
            this.list.addAll(list)
        }else{
            this.list = list
        }
        notifyDataSetChanged()
    }

    override fun onBindViewHolder(p0: MyViewHolder?, p1: Int) {
        bind?.onBind(p0,p1,list[p1])
    }

    override fun onCreateViewHolder(p0: ViewGroup?, p1: Int): MyViewHolder {
        var res = context.resources
        return  MyViewHolder(LayoutInflater.from(context).inflate(res.getLayout(layout!!), p0, false))

    }

    override fun getItemCount(): Int {
        return list.size
    }

    class MyViewHolder : RecyclerView.ViewHolder {
        var view:View? =null
       constructor(view:View) : super(view) {
           this.view = view
        }
        fun getView(id:Int):View{
            return view!!.findViewById(id)
        }

    }
    interface BindViewHolder<in T>{
        fun onBind(p0: MyViewHolder?, p1: Int,content : T)
    }
}

其他类型的封装原理也是一样的,如果能有更好的封装,希望童鞋们能相互交流(正在寻找更好的封装中。。)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值