プロジェクト目標
- RecycleViewの改善効率化
- アダプタテンプレートを書く必要はありません
- データソースとビューのバインディングに集中
- 化学薬品のヘッド/テール部分の追加を試みました。
- 複数リストの連結
Log
はじめに
RecyclerViewの拡張、汎用Adapterの拡張、汎用ViewHolderの拡張、入り口の統一された構成、Adapterを書く必要がなく、データとビューのバインディングだけに集中できます。
アダプタを書く必要はなく、config関数を通してデータソースとレイアウトマネージャを渡します。
次に、対応するクラス、レイアウトID、データクラスのビューバインディング関数をaddType関数で追加します。
マルチレイアウトの場合は、addType を複数回呼び出すだけで追加されます。
カスタムViewHolderのサポート
ヘッダー、フットビューの追加をサポートし、具体的には、デモの呼び出しは非常に単純であることがわかります!
複数リストのスプライシングに対応
利用例
インポート (SAMインターフェースを使用するため、Kotlin 1.4以上が必要)
//root -> build.gradle
allprojects {
repositories {
...
maven { url 'https://.io' }
}
}
//project -> build.gradle
dependencies {
implementation 'com.github.XiaoBaiCZ:RecyclerViewExtend:0.6.1'
}
APIはじめに
/**
* 設定方法
* @param data データ・ソース:あらゆるタイプ、混合タイプをサポート
* @param lm レイアウトマネージャー:デフォルトのリニアレイアウト
* @param config タイプビルダー機能、addTypeによるタイプに対応したレイアウトとビューバインディング機能の追加
*/
fun RecyclerView.config(
data: MutableList,
lm: RecyclerView.LayoutManager = LinearLayoutManager(context),
config: Builder.()->Unit
)
//Builder
//ViewHolderをカスタマイズする
/**
* データ型/ビュー型関数を追加する
* @param resId レイアウトID
* @param func バインディング関数を見る
*/
fun <D, V> addType(resId: Int, func: BindFunc)
//デフォルトViewHolderX
/**
* データ型/ビュー型関数を追加する
* @param resId レイアウトID
* @param func バインディング関数を見る
*/
fun <D> addType(resId: Int, func: BindFunc)
ご利用の流れ
val data: ArrayList<Any>() //
val data2: ArrayList<Any>() //データソースをスプライスする
val list: RecyclerView = ... //RecyclerView
//コンフィギュレーション関数を呼び出し、データソース、デフォルトのリニアレイアウトを渡す。
list.config(data) {
// データタイプはレイアウトIDに自動的にバインドされる。
addType<Datatype1、CustomViewHolder1>(レイアウトID1) { d, h, p -> //d Data, h ViewHolder, p 添え字
//ここでビューのデータバインディングを行う
}
//マルチレイアウト適応のために、addTypeを複数回呼び出すことができる。
addType<Datatype2、カスタムViewHolder2>(レイアウトID2) { d, h, p -> //d Data, h ViewHolder, p 添え字
//ここでビューのデータバインディングを行う
}
//ヘッダーを追加する
addHeader<Header1>(Header1(), R.layout.item_header1)
addHeader<Header2>(Header2(), R.layout.item_header2)
//テールを追加する
addFoot<Foot1>(Foot1(), R.layout.item_foot1)
ddFoot<Foot2>(Foot2(), R.layout.item_foot2)
//スプライスリスト、最初の方法
concatContent(data2)
}
//レイアウトマネージャーを設定する
val lm: GridLayoutManager //他のレイアウトマネージャー
list.config(data, lm) {
...
}





