KeltlinでListAdapterを使う方法


コーディングを開始したとき、私がしなければならない最初のタスクの1つはリストにいくつかのデータを設定することでした.私は、この「単純な」仕事に苦労した方法を覚えています.
ほとんどすべてのAndroidアプリはリストが含まれているので、私はあなたが私が学んだことを共有します.
右から始めましょう.
通常は、リスト内のリストを表示するには、我々は、同様に、画面をオフにアイテムをスクロールするときに、新しいものを作成せずに、各要素を表示するために使用されるビューをリサイクルするRestesterViewを使用します.次に、ResitionerViewビュービューオブジェクトによって作成されたビューを要求し、そのデータにバインドします.

アダプタ
アダプターは、デザインパターンで、もう1つのインターフェイスを別の例で動作させるために使用されます.これは、データをリサイクルererviewでそれらを表示することができるように適応されたことを示しています.
このタスクを実行するには、アダプタインタフェースを知る必要があります.
  • どのように多くの項目のリストが
  • アイテムの描画方法
  • 新しいビューの作成方法
  • 以下のようにしてlistAdapterを作成できます:
    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)
        }
    
    今までのところ、ありがとうございました.
    いくつかのフィードバックに感謝します.
    次の方でお会いしましょう.