あなたのニーズの90 %のための一般的なリサイクリング・アダプター

30222 ワード


アンドロイドユニバーサル
アダプタとビューモデルの100 sを作成するのに疲れた.
このライブラリは、簡単に、すべてのリストについては、ViewHoweverアダプタを作成する必要はありません

🤔 どうやって?
リソースパターンを使用して、リストのステータスを検索し、それに応じてビュータイプを表示します.

ステップ1.Jitpackリポジトリをビルドファイルに追加します.
allprojects {
    repositories {
    ...
        maven { url "https://jitpack.io" }
    }
}

ステップ1.依存性を追加するSee latest release ).

dependencies {
    implementation 'com.github.yogeshpaliyal:Android-Universal-Recycler-View-Adapter:+'
}

🛠️ このプロジェクトで使用
  • List Adapter
  • Async DiffUtil
  • Resource & Status Util Classes

  • 🤩 機能
  • コンテンツリスト(複数のビュー型をサポートする)
  • 読み込み+リスト(実際のリストを表示するためのシマーアイテムを示す)
  • ローディング+ Loadmore(ロードアイテムを表示し、無限のリストを作成するために底に項目を追加)
  • データがない
  • エラーページ
  • より良いパフォーマンスのためのasync diffutils

  • いつの項目を表示するには?
    ステータス
    リストサイズ
    結果の振る舞い
    読み込み
    0
    セルをロードする
    成功
    0
    いいえレコードが見つかりましたレイアウトが表示されます
    エラー
    0
    エラーレイアウト
    読み込み
    0より多い
    データセル+最後にロード
    成功
    0より多い
    データセル
    エラー
    0より多い
    終わりのデータセル+エラーセル

    XML変数
    DataIndidingを使用してビューアイテムをアダプターでバインドするには
    名前は以下の通りでなければなりません
    binding型はリソースバインディングファイルと同じです.
    これは、モデル内の変数値を変更した後、コールバック内のビューを更新するために使用できます.たとえば、UserListinActivityをチェックします.
    この変数を使用するすべてのアダプターレイアウト
    <variable
                name="binding"
                type="androidx.databinding.ViewDataBinding" />
    
    model型はアダプタに渡すモデルと同じです.
    この変数を使用する内容レイアウト
    <variable
                name="model"
                type="com.techpaliyal.androidkotlinmvvm.model.BasicModel" />
    
    listener任意の/オブジェクトを入力しますが、作成中にアダプターを渡すのと同じです.
    この変数を使用する内容とエラーレイアウト
    <variable
                name="listener"
                type="com.techpaliyal.androidkotlinmvvm.model.BasicListener" />
    
    message型は文字列です.
    この変数を使用したエラーレイアウト
    <variable
                name="message"
                type="String" />
    

    コードを見せてください
     private val mAdapter by lazy {
            UniversalRecyclerAdapter.Builder<UserModel>(
                lifecycleOwner = this,
                content = UniversalAdapterViewType.Content(resource = R.layout.item_user,
                    object : BasicListener<UserModel> {
                        override fun onClick(model: UserModel) {
                            Toast.makeText(this@LoadingListingActivity, model.name, Toast.LENGTH_SHORT)
                                .show()
                        }
                    }),
                loading = UniversalAdapterViewType.Loading(
                    resourceLoading = R.layout.layout_loading_full_page,
                    defaultLoadingItems = 1
                ),
                error = UniversalAdapterViewType.Error(errorLayout = R.layout.item_error),
                loadingFooter = UniversalAdapterViewType.LoadingFooter(loaderFooter = R.layout.item_loading_more)
            ).build()
        }
    
    注意: * * Universal ExerutionerAdapterのすべてのパラメータ.Builder *はオプションです.使用するユーザーだけを使用します**
    これは、データの変更を更新するビューを通知するために使用されます.
    コンテンツ=主なリスト要素.
    - resource =要素レイアウトID.
    - listener =アイテムレイアウトに送信するインターフェースを渡す
    読み込みリスト要素.(かすか、または単にローダーのように).
    -レイアウトIDを読み込みます.
    \- DefaultLoadingItem =読み込み中に表示する項目.
    ステータス= =ステータスのときに表示されるエラーです.エラー
    \- ErrorLayout =エラーレイアウトID.
    - listener =エラーレイアウトに送信するインターフェースを渡す.



    簡易リスト

    リストアイテムFile )
    <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:app="http://schemas.android.com/apk/res-auto">
        <data>
            <variable
                name="model"
                type="com.techpaliyal.androidkotlinmvvm.model.BasicModel" />
            <variable
                name="listener"
                type="com.techpaliyal.androidkotlinmvvm.listeners.BasicListener" />
        </data>
    <androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:padding="5dp"
            android:textSize="16sp"
            android:text="@{model.name}"
            android:onClick="@{()->listener.onClick(model)}"/>
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    </layout>
    

    アダプタを初期化するFile )
     private val mAdapter by lazy {
            UniversalRecyclerAdapter.Builder<BasicModel>(
                lifecycleOwner = this,
                content = UniversalAdapterViewType.Content(
                    R.layout.item_simple,
                    listener = object : BasicListener<BasicModel> {
                        override fun onClick(model: BasicModel) {
                            Toast.makeText(this@BasicListingActivity, model.name, Toast.LENGTH_SHORT)
                                .show()
                        }
                    })
            ).build()
        }
    

    アダプターに取り付ける
    binding.recyclerView.adapter = mAdapter.getAdapter()
    

    データ更新
    mAdapter.updateData(Resource.success(list))
    

    コンテンツ+エラー
    例:読み込み時にAPIを押すと、Simmerが表示され、APIレスポンスがデータを表示したりエラーが発生したりしました

    アダプタを初期化する
    private val mAdapter by lazy {
            UniversalRecyclerAdapter.Builder<UserModel>(
                lifecycleOwner = this,
                content = UniversalAdapterViewType.Content(R.layout.item_user,
                    object : BasicListener<UserModel> {
                    override fun onClick(model: UserModel) {
                        Toast.makeText(this@LoadingListingActivity, model.name, Toast.LENGTH_SHORT)
                            .show()
                    }
                }),
                loading = UniversalAdapterViewType.Loading(R.layout.layout_loading_full_page, defaultLoadingItems = 1),
                error = UniversalAdapterViewType.Error(R.layout.item_error)).build()
        }
    

    アダプターに取り付ける
    binding.recyclerView.adapter = mAdapter.getAdapter()
    

    データ更新
     mViewModel.data.observe(this, Observer { data -> 
         // The data type is like Resource<List<T>>
         // if data.status == Status.LOADING thenn it will show the loading view
         // if data.status == Status.SUCCESS then it will show the content list
         // if data.status == Status.ERROR then it will show the error View and data.message will be passed to view as message variable
                mAdapter.updateContent(it)
    })
    

    複数のビュータイプ
    あなたのリスト内の複数のビューの種類を表示する
    実装UniversalViewType あなたのモデルとオーバーライドでgetLayoutId()スクリーンショットview fullscreen

    例:

    ヘディングモデル
    data class HeadingModel(val title: String) : UniversalViewType,SchoolListing {
        override fun getLayoutId(): Int {
            return R.layout.item_heading
        }
    }
    

    リストモデル
    data class ListItemModel(val name: String) : UniversalViewType,SchoolListing {
        override fun getLayoutId(): Int {
            return R.layout.item_list
        }
    }
    

    学校一覧.KT
    このインターフェイスは、リモデラービューで使用するモデルを識別するために使用されますSchoolListing
    interface SchoolListing
    

    配列へのデータの追加
    val tempArray = ArrayList<SchoolListing>()
            tempArray.add(HeadingModel("Principal"))
            tempArray.add(ListItemModel("Yogesh Paliyal"))
    
            tempArray.add(HeadingModel("Staff"))
            tempArray.add(ListItemModel("Sachin Rupani"))
            tempArray.add(ListItemModel("Suraj Vaishnav"))
            tempArray.add(ListItemModel("Himanshu Choudhan"))
            tempArray.add(ListItemModel("Pramod Patel"))
            tempArray.add(ListItemModel("Bharath"))
            tempArray.add(ListItemModel("Sanjay"))
            tempArray.add(ListItemModel("Surendra Singh"))
    
    
            tempArray.add(HeadingModel("Students"))
            tempArray.add(ListItemModel("Bhoma Ram"))
            tempArray.add(ListItemModel("Deepak"))
            tempArray.add(ListItemModel("Sohan"))
            tempArray.add(ListItemModel("Umesh"))
            tempArray.add(ListItemModel("Amanda Howard"))
            tempArray.add(ListItemModel("Jeremy Glover"))
            tempArray.add(ListItemModel("Ginger Larson"))
            tempArray.add(ListItemModel("Lincoln Pierpoint"))
            tempArray.add(ListItemModel("Brian Brooks"))
            tempArray.add(ListItemModel("Erasmus Hall"))
            tempArray.add(ListItemModel("Amber Lane"))
            tempArray.add(ListItemModel("Elsie Cole"))
    
    ビューフルexample

    フィードバック
    問題をあなたが探している取得するには、無料でご質問を入れてDiscussion Section そして、このライブラリとドキュメントを改善するのを手伝ってください.
    ハッピーコーディング😁