KeltlinでListAdapterを使う方法
コーディングを開始したとき、私がしなければならない最初のタスクの1つはリストにいくつかのデータを設定することでした.私は、この「単純な」仕事に苦労した方法を覚えています.
ほとんどすべてのAndroidアプリはリストが含まれているので、私はあなたが私が学んだことを共有します.
右から始めましょう.
通常は、リスト内のリストを表示するには、我々は、同様に、画面をオフにアイテムをスクロールするときに、新しいものを作成せずに、各要素を表示するために使用されるビューをリサイクルするRestesterViewを使用します.次に、ResitionerViewビュービューオブジェクトによって作成されたビューを要求し、そのデータにバインドします.
アダプタ
アダプターは、デザインパターンで、もう1つのインターフェイスを別の例で動作させるために使用されます.これは、データをリサイクルererviewでそれらを表示することができるように適応されたことを示しています.
このタスクを実行するには、アダプタインタフェースを知る必要があります. どのように多くの項目のリストが アイテムの描画方法 新しいビューの作成方法 以下のようにしてlistAdapterを作成できます:
次に、2つのメソッドを実装する必要があります.
見てみましょう.
アダプターはビューホルダーオブジェクトを必要とし、ビューを保持するオブジェクトとしてそれらを考えることができます.リスト内の個々の要素はビューホルダーによって定義されます.ビューホルダの必要性は、RefererViewがビューと直接対話することはないので、正当化されます.
これは、新しいビューホルダーを作成し、インフレーションの詳細とビューホルダークラスのレイアウトに関連する作業をカプセル化するクリーンな方法を提供します.それは懸念の分離の優れた例です.そして、それはどちらの部分ホワイトアウトもすべてのコードを変えなければならないようにするより良い方法をもたらします.
オブジェクトのリストをListAdapterに渡すには、ResolutionViewを設定した後のアクティビティーまたはフラグメント内で呼び出します
いくつかのフィードバックに感謝します.
次の方でお会いしましょう.
ほとんどすべてのAndroidアプリはリストが含まれているので、私はあなたが私が学んだことを共有します.
右から始めましょう.
通常は、リスト内のリストを表示するには、我々は、同様に、画面をオフにアイテムをスクロールするときに、新しいものを作成せずに、各要素を表示するために使用されるビューをリサイクルするRestesterViewを使用します.次に、ResitionerViewビュービューオブジェクトによって作成されたビューを要求し、そのデータにバインドします.
アダプタ
アダプターは、デザインパターンで、もう1つのインターフェイスを別の例で動作させるために使用されます.これは、データをリサイクルererviewでそれらを表示することができるように適応されたことを示しています.
このタスクを実行するには、アダプタインタフェースを知る必要があります.
class MoviesAdapter(private val click: () -> Unit) :
ListAdapter<MovieDto, MoviesAdapter.MoviesViewHolder>(MoviesDiff())
上のスニペットではadapter class
拡張ListAdapter
クラスのリストを提供しますMovieDto
), 見習いのMoviesViewHolder
), とaMoviesDiff()
).MoviesDiff()
拡張diffutil.ItemCallback、リスト内の変更を計算するアダプタのヘルパークラスです.GoogleがそれをするアルゴリズムはMyers diff
アルゴリズム.次に、2つのメソッドを実装する必要があります.
onCreateViewHolder
, これは、再表示が必要なときに新しいビューホルダーオブジェクトを作成する責任がありますonBindViewHolder
, 適切なデータをバインドし、ビューホルダーのレイアウトを埋めるために使用します.見てみましょう.
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MoviesViewHolder {
return MoviesViewHolder.from(parent)
}
override fun onBindViewHolder(holder: MoviesViewHolder, position: Int) {
holder.bind(getItem(position), click)
}
onCreateViewHolder
2つの引数、スクリーンに表示される前に新しいビューを追加するViewGroupを受け取り、ViewTypeパラメーターを使用すると、同じリビジョンビュー内の複数の異なるビューが表示されます.onBindViewHolder
2つの引数、ビューホルダオブジェクト、および位置の整数もとります.ビューホルダーは、ビューを実際に管理することに関連するすべてのクラスに対して責任を負うクラスです.アダプターはビューホルダーオブジェクトを必要とし、ビューを保持するオブジェクトとしてそれらを考えることができます.リスト内の個々の要素はビューホルダーによって定義されます.ビューホルダの必要性は、RefererViewがビューと直接対話することはないので、正当化されます.
class MoviesViewHolder private constructor(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(data: MovieDto, click: () -> Unit) {
with(itemView) {
ctnBestMovies.setOnClickListener { click.invoke() }
tvBestMovieName.text = data.name
}
}
companion object {
fun from(parent: ViewGroup): MoviesViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val view = layoutInflater.inflate(R.layout.item_movies, parent, false)
return BestMoviesViewHolder(view)
}
}
}
カスタムMoviesViewHolder
リサイクルervewを拡張します.ViewHolderとビューをバインドするロジックをカプセル化し、ビューホルダー自体からの作成をクリックし、Clickイベントを処理します.これは、新しいビューホルダーを作成し、インフレーションの詳細とビューホルダークラスのレイアウトに関連する作業をカプセル化するクリーンな方法を提供します.それは懸念の分離の優れた例です.そして、それはどちらの部分ホワイトアウトもすべてのコードを変えなければならないようにするより良い方法をもたらします.
オブジェクトのリストをListAdapterに渡すには、ResolutionViewを設定した後のアクティビティーまたはフラグメント内で呼び出します
adapter.submitList(yourList)
そして、あなたは完了です!private fun displayMovies(movies: List<MovieDto>) {
moviesAdapter.submitList(movies)
}
今までのところ、ありがとうございました.いくつかのフィードバックに感謝します.
次の方でお会いしましょう.
Reference
この問題について(KeltlinでListAdapterを使う方法), 我々は、より多くの情報をここで見つけました https://dev.to/brunohensel/how-to-use-a-listadapter-2d2iテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol