RecyclerView的用法是什么样子的我就不说了,作安卓的同窗都知道,须要写adapter,而后在adapter中写布局文件,虽然有第三方的框架能够大大减小代码量,可是仍是存在一些问题。我在想RecyclerView能不能像TextView那样直接setText("xxx")同样使用呢?答案是确定的,今天给你们介绍一款框架名叫CHGAdapter的Android版本。这里主要介绍Android的kotlin版。java
话很少说,如今开始介绍具体使用方法。android
显示简单的列表
首先建立一个模型:SongModelgit
由于咱们这里要实现相似TextView那种setText的方式来使用RecyclerView,所以咱们须要告诉RecyclerView的内容有两点github
1.数据对象使用哪个布局文件。2.数据对象使用哪个ViewHolder。那么咱们须要模型实现接口算法
com.chg.adapter.Modelswift
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 } }
运行一下看看效果框架
显示多种类型的数据
说明:这里为了让每一个demo看起来清晰,所以每个demo都单首创建一个Activity。ide
咱们这里再建立一个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中的数据只是建立了一个模型设置好布局文件和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