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