RecyclerView还在写Adapter?永远抛弃吧(一)

RecyclerView还在写Adapter?永远抛弃吧(一)

RecyclerView的用法是什么样子的我就不说了,做安卓的同学都知道,需要写adapter,然后在adapter中写布局文件,虽然有第三方的框架可以大大减少代码量,但是还是存在一些问题。我在想RecyclerView能不能像TextView那样直接setText("xxx")一样使用呢?答案是肯定的,今天给大家介绍一款框架名叫CHGAdapter的Android版本。这里主要介绍Android的kotlin版。

话不多说,现在开始介绍具体使用方法。

显示简单的列表
首先创建一个模型:MenuItemModel

因为我们这里要实现类似TextView那种setText的方式来使用RecyclerView,因此我们需要告诉RecyclerView的内容有两点

1.数据对象使用哪一个布局文件。2.数据对象使用哪一个ViewHolder。那么我们需要模型实现接口

com.chg.adapter.Model

open class SongModel : Model {

    var iconName:Int = 0
    var name:String? = null
    var songer:String? = null

    constructor(iconName: Int, name: String?, songer: String?) {
        this.iconName = iconName
        this.name = name
        this.songer = songer
    }

    override fun getResource(position: Int): Int {
        return R.layout.song_item
    }

    override fun getHolderClass(position: Int): Class<*> {
        return SongViewHolder::class.java
    }
}

接下来是写我们的SongActivity中的代码。布局文件中放一个RecyclerView,然后activity中的代码如下。

class SongActivity : AppCompatActivity() {
    private lateinit var recyclerView: RecyclerView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        recyclerView = findViewById(R.id.recyclerView)
        //设置数据
        recyclerView.models = getModels()
    }

    fun getModels(): List<Model> {
        var models = mutableListOf<SongModel>()
        for (index in 1..1000) {
            models.add(SongModel(R.drawable.music,"歌曲名称:$index","歌手名字:$index"))
        }
        return models
    }

}

运行一下看看效果
RecyclerView还在写Adapter?永远抛弃吧(一)

显示多种类型的数据
说明:这里为了让每个demo看起来清晰,因此每一个demo都单独创建一个Activity。

我们这里再创建一个Model命名为AlbumModel。代码如下

open class AlbumModel : Model {
     var name: String? = null
     var songer: String? = null

    constructor(name: String?, songer: String?) {
        this.name = name
        this.songer = songer
    }

    override fun getResource(position: Int): Int {
        return R.layout.album_item
    }

    override fun getHolderClass(position: Int): Class<*> {
        return AlbumViewHolder::class.java
    }
}

然后创建我们的activity命名为RecommendActivity。代码如下

class RecommendActivity : AppCompatActivity() {
    private lateinit var recyclerView: RecyclerView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        recyclerView = findViewById(R.id.recyclerView)
        //设置数据
        recyclerView.models = getModels()
    }

    fun getModels(): List<Model> {
        var models = mutableListOf<Model>()
        for (i in 0..99) {
            if (i % 2 == 0) {
                models.add(SongModel(R.drawable.music,"歌曲名称:$i","歌手名字:$i"))
            } else {
                models.add(AlbumModel("专辑名称:$i", "歌手"))
            }
        }
        return models
    }
}

这里我们交替显示2中不同类型的数据。因此创建数组的时候通过对2取莫的算法来构造数据,运行效果如下

RecyclerView还在写Adapter?永远抛弃吧(一)

可以看到我们在增加RecyclerView中的数据只是创建了一个模型设置好布局文件和ViewHolder后将模型数据放入List中后RecyclerView就能按照预期的方式显示出来。这样以后我们只需要往数组中添加新的数据类型RecyclerView就会按照数组中的数据顺序显示对应的ItemViw。

由于篇幅的问题,先简单介绍到这里。更多介绍可以下载demo,或者关注后续文章。或者加入QQ群讨论交流

Android(CHGAdapter)

Java:https://github.com/chenhaigang888/CHGAdapter_android
Kotlin:https://github.com/chenhaigang888/CHGAdapter_Kotlin
Ios(CHGAdapter)

oc:https://github.com/chenhaigang888/CHGAdapter
swift:https://github.com/chenhaigang888/CHGAdapter_swift
HarmonyOS(UltimateProvider)

java:https://github.com/chenhaigang888/UltimateProvider
如有使用方面的问题或者交流请加QQ群:494648687

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章