Kotlin笔记(50) — RecyclerView适配器基类

2021-02-05  本文已影响0人  奔跑的佩恩

前言

Android开发过程中,我们在用RecyclerView的时候,会涉及到RecyclerView适配器的问题,为了减少在写适配器时的代码,我们需要封装一个RecyclerView适配器基类,那么下面就来讲讲RecyclerView适配器基类的封装吧。

今天涉及知识有:

  1. 依赖
  2. 继承适配器基类RecyclerBaseAdapter写一个适配器TestAdapter
  3. TestAdapter在Activity中的使用
  4. 效果图和项目结构图
  5. 适配器基类RecyclerBaseAdapter源码

先来波效果图


效果图.gif

一. 依赖

使用RecyclerView及为了简化ViewHodler初始化,我们需要在app_module对应的build.gradle中添加以下依赖:

android {
    
    //@Parcelize标记需要设置 experimental = true
    //LayoutContainer插件(适配器的viewHolder不用初始化控件)需要设置 experimental = true
    androidExtensions {
        experimental = true
    }

dependencies {
    //RecyclerView引用 
    implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha04'
    //其他代码省略
    //......
}

}

RecyclerView引用的最新版本,可以查看Android中文网

二.继承适配器基类RecyclerBaseAdapter写一个适配器TestAdapter

为了简化RecyclerView适配器的编写,我封装了一个适配器基类RecyclerBaseAdapter,然后继承它编写了自己的适配TestAdapter,下面贴出TestAdapter代码:

class TestAdapter<T> : RecyclerBaseAdapter<T> {

    private var mIndex: Int = -1

    constructor(data: MutableList<T>?, context: Context) : super(
        R.layout.recycler_item,
        data,
        context
    ) {}

    fun setIndex(index: Int) {
        this.mIndex = index
    }

    override fun <T> BindFunction(containerView: View, mData: MutableList<T>?, position: Int) {
        var title: TextView = containerView.findViewById(R.id.mTitle)
        var itemView: ConstraintLayout = containerView.findViewById(R.id.mContentView)

        //设置值
        var item: String = mData!!.get(position).toString()
        //名称
        title.text = item

        //设置背景
        title.setBackgroundColor(
            if (position == mIndex) {
                Color.BLUE
            } else {
                Color.GREEN
            }
        )

        //点击事件
        itemView.setOnClickListener(View.OnClickListener {
            if (mOnItemClickListener != null) {
                mOnItemClickListener!!.onItemClick(itemView,position)
            }
        })
    }
}

三.TestAdapter在Activity中的使用

下面贴出TestAdapterMainActivity中使用代码:

open class MainActivity : AppCompatActivity(), View.OnClickListener {

    private var nameList:MutableList<String> = mutableListOf("幼稚园","小学","初中","高中","大学")

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(com.kotlintest.R.layout.activity_main)

        initData()
        setListener()
    }

    private fun initData() {
        mRecyclerView.layoutManager = LinearLayoutManager(this)
        var testAdapter: TestAdapter<String> = TestAdapter(nameList,this)
        mRecyclerView.adapter=testAdapter
        mRecyclerView.itemAnimator = DefaultItemAnimator() //设置动画

        //点击事件
        testAdapter.setOnItemClickListener(object : RecyclerBaseAdapter.OnItemClickListener {
            override fun onItemClick(view: View, position: Int) {
                testAdapter.setIndex(position)
                testAdapter.notifyDataSetChanged()

                toast("==wo==点击了 ${nameList.get(position)}=")
            }
        })

    }

    private fun setListener(){
        mBtnTest.setOnClickListener(this@MainActivity)
    }

    override fun onClick(v: View) {
       when(v.id){
           com.kotlintest.R.id.mBtnTest -> {

           }
       }
    }

}

四.效果图和项目结构图

效果图.gif
项目结构图.png

五.适配器基类RecyclerBaseAdapter源码

下面贴出适配器基类RecyclerBaseAdapter源码:

上一篇下一篇

猜你喜欢

热点阅读