あなたのニーズの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:+'
}
🛠️ このプロジェクトで使用
🤩 機能
いつの項目を表示するには?
ステータス
リストサイズ
結果の振る舞い
読み込み
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 そして、このライブラリとドキュメントを改善するのを手伝ってください.
ハッピーコーディング😁
Reference
この問題について(あなたのニーズの90 %のための一般的なリサイクリング・アダプター), 我々は、より多くの情報をここで見つけました https://dev.to/yogeshpaliyal/universal-recycler-adapter-for-90-of-your-needs-2amoテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol