blog

RecyclerViewは一般的なユニバーサル・アダプタの使用を簡素化する アダプタ

プロジェクト・リンク GitHub 気に入ったら小さな星をつけてください プロジェクト目標 アダプタ・テンプレートを書く必要がなく、データ・ソースとビュー・バインディングに集中するだけで、APIの利用...

May 13, 2020 · 3 min. read
シェア

プロジェクト目標

  • RecycleViewの改善効率化
  • アダプタテンプレートを書く必要はありません
  • データソースとビューのバインディングに集中
  • 化学薬品のヘッド/テール部分の追加を試みました。
  • 複数リストの連結

Log

はじめに

RecyclerViewの拡張、汎用Adapterの拡張、汎用ViewHolderの拡張、入り口の統一された構成、Adapterを書く必要がなく、データとビューのバインディングだけに集中できます。

アダプタを書く必要はなく、config関数を通してデータソースとレイアウトマネージャを渡します。

次に、対応するクラス、レイアウトID、データクラスのビューバインディング関数をaddType関数で追加します。

マルチレイアウトの場合は、addType を複数回呼び出すだけで追加されます。

カスタムViewHolderのサポート

ヘッダー、フットビューの追加をサポートし、具体的には、デモの呼び出しは非常に単純であることがわかります!

複数リストのスプライシングに対応

利用例

ViewBindingを使ったデモ

データバインディングデモ

インポート (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) {
 ...
}
Read next

Springのクラウドのアップグレードパス - ホクストン - 10ボディ要求でゲートウェイを再試行する 本体が失われた問題

zone1-service-provider-instance1、zone1-service-provider-instance2(zone1-service-provider-instance1 はインターフェイスへのアクセスが例外をスローしたインスタンス)を起動します。ゲートウェイを起動し、Postmanを使ってインターフェースを呼び出します。

May 13, 2020 · 9 min read