使用Kotlin封装RecycleView和重构

本文介绍了如何使用Kotlin对RecycleView.Adapter进行封装,以创建一个通用的Adapter,减少重复代码。作者讨论了尝试使用多个ViewHolder的思路,但最终选择只替换`bindForecast`方法来实现通用性。通过示例代码展示了如何在实际应用中使用这个通用Adapter,并且提到了对于复杂页面的适应性。
摘要由CSDN通过智能技术生成

今天,是对RecycleView.Adapter进行封装,形成通用的Apapter;RecycleView概念和用途,以为为什么要用RecycleView而不用Listview,这些我就不重复了,一搜一大把,写的都比我好,理解的也比我深入,这里,我要实现的就是使用Kotlin实现通用Adapter;为什么要实现通用Adapter,无非是我们的项目中,会出现各式各样的List展示,于是乎,就出现了无数个Adapter,虽然ctrl+c和ctrl+v很容易完成,但是,毕竟多了那么多类,对ctrl键的伤害也大,而且我是懒人,希望能够一次书写,n次运行,于是便有了这个想法,今天刚好不算忙,就实现了下,下面让我们来看代码:

先看看之前的Adapter的代码:

MainAdapter

package com.vslimit.kotlindemo.adapter

/**
 * Created by vslimit on 16/1/15.
 */
class MainAdapter(val items: List<String>, val itemClick: (String) -> Unit) :
        RecyclerView.Adapter<MainAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = parent.ctx.layoutInflater.inflate(R.layout.item_list_main, parent, false)
        return ViewHolder(view, itemClick)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bindForecast(items[position])
    }

    override fun getItemCount() = items.size

    class ViewHolder(view: View, val itemClick: (String) -> Unit) : RecyclerView.ViewHolder(view) {

        fun bindForecast(item: String) {
            with(item) {
                itemView.item_name.text = item
                itemView.item_text.text = item
                itemView.onClick { itemClick(item) }
            }
        }
    }
}

我们仔细看看代码,发现,主要就是ViewHolder的实现,其他的代码大同小异,那么这时,想法来了,可不可以只写一个Adapter,多个ViewHolder呢,说写就写,就有了下面的代码:

BaseAdapter

package com.vslimit.kotlindemo.adapter

import android.support.v7.widget.RecyclerView
import android.view.ViewGroup
import com.vslimit.kotlindemo.extensions.ctx
import org.jetbrains.anko.layoutInflater

/**  
 * Created by vslimit on 16/1/15.
 */
class BaseAdapter<T, K : ViewHolder<T>>(val layoutResourceId: Int, val items: List<T>, val itemClick: (T) -> Unit) :
        RecyclerView.Adapter<K>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): K {
        val view = parent.ctx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值