美文网首页
Kotlin笔记(50) — RecyclerView适配器基类

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

作者: 奔跑的佩恩 | 来源:发表于2021-02-05 09:17 被阅读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源码:

    相关文章

      网友评论

          本文标题:Kotlin笔记(50) — RecyclerView适配器基类

          本文链接:https://www.haomeiwen.com/subject/ohtqtltx.html