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
}
}
運行一下看看效果
顯示多種類型的數據
說明:這裏爲了讓每個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中的數據只是創建了一個模型設置好佈局文件和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