1.ホルダーを見る
ListViewでは、ビューの参照を維持するための推奨アプローチは、ビューホルダーを定義することでした。しかし、それは強制ではありませんでした。そうしないことで、ListViewは古いデータを表示します。ビューホルダーを使用しないもう1つの大きな欠点は、毎回IDでビューを検索するという重い操作につながる可能性があります。その結果、リストビューが遅延しました。
この問題は、RecyclerView.ViewHolderクラスを使用してRecylerViewで解決されます。これは、RecyclerViewとListViewの大きな違いの1つです。RecyclerViewを実装する場合、このクラスは、ViewHolderを位置にバインドするためにアダプターが使用するViewHolderオブジェクトを定義するために使用されます。ここで注目すべきもう1つの点は、RecyclerViewのアダプターを実装するときに、ViewHolderを提供することが必須であることです。これにより、実装は少し複雑になりますが、ListViewで直面する問題は解決されます。
2.レイアウトマネージャー
ListViewといえば、使用できるListViewのタイプは1つだけです(垂直方向のListView)。水平スクロールでListViewを実装することはできません。私は水平スクロールを実装する方法があることを知っていますが、それがそのように機能するように設計されていなかったと私は信じています。
しかし、Android RecyclerViewとListViewを比較すると、水平方向のコレクションもサポートされています。実際には、複数のタイプのリストをサポートしています。複数のタイプのリストをサポートするには、RecyclerView.LayoutManagerクラスを使用します。これは、ListViewにはない新しいものです。RecyclerViewは、3種類の定義済みレイアウトマネージャーをサポートしています。
LinearLayoutManager –これは、RecyclerViewの場合に最も一般的に使用されるレイアウトマネージャーです。これにより、水平スクロールリストと垂直スクロールリストの両方を作成できます。StaggeredGridLayoutManager –このレイアウトマネージャーを使用して、ずらしたリストを作成できます。Pinterest画面と同じように。GridLayoutManager –このレイアウトマネージャーは、他の画像ギャラリーのようにグリッドを表示するために使用できます。
3.アイテムアニメーター
リスト内のアニメーションはまったく新しい次元であり、無限の可能性があります。そのため、ListViewでは、アイテムのアニメーション化、追加、または削除を行うための特別な規定はありません。その代わり、後でAndroidが進化するにつれて、ListViewのアニメーションに関するこのビデオチュートリアルで、GoogleのChet HaaseによってViewPropertyAnimatorが提案されました。
一方、Android RecyclerViewとListViewを比較すると、アニメーションを処理するためのRecyclerView.ItemAnimatorクラスがあります。このクラスを使用して、アイテムの追加、削除、移動イベントのカスタムアニメーションを定義できます。また、カスタマイズが不要な場合に備えて、DefaultItemAnimatorも提供します。
4.アダプター
ListViewアダプターの実装は簡単でした。彼らはすべての魔法がかつて起こったメインメソッドgetViewを持っていました。ビューが位置にバインドされた場所。また、以前は興味深いメソッドregisterDataSetObserverがあり、アダプターでオブザーバーを設定できました。この機能はRecyclerViewにもありますが、RecyclerView.AdapterDataObserverクラスが使用されます。しかし、ListViewを支持する点は、アダプターの3つのデフォルト実装をサポートすることです。
ArrayAdapter CursorAdapter SimpleCursorAdapter RecyclerViewアダプタは、DBカーソルとArrayListsの組み込みサポートを除いて、ListViewアダプタが持っていたすべての機能を備えています。現在、RecyclerView.Adapterでは、アダプターにデータを提供するカスタム実装を作成する必要があります。BaseAdapterがListViewに対して行うように。RecyclerViewアダプターの実装について詳しく知りたい場合は、Android RecyclerViewの例を参照してください。
5.データの変更を通知する
ListViewを使用しているときに、データセットが変更された場合、基になるアダプターのnotifyDataSetChangedメソッドを呼び出してデータを更新する必要があります。または、notifyDataSetChangedメソッドを自動的に呼び出す場合は、setNotifyOnChangeメソッドをtrueに設定します。しかし、どちらの場合も、結果は非常に重いものです。基本的にはリストのビューを更新します。
ただし、RecyclerViewアダプターの場合とは逆に、単一のアイテムまたはアイテムの範囲が変更された場合、それに応じて変更を通知するメソッドがあります。それらはそれぞれnotifyItemChangedとnotifyItemRangeChangedであり、さらに多くのようなものです:
notifyItemInsterted notifyItemMoved notifyItemRangeInsterted notifyItemRangeRemovedそしてもちろん、リスト全体を更新する元のメソッド、つまり、適応されたデータセット全体が変更されたことを通知するnotifyDataSetChangedがあります。
6.アイテムの装飾
ListViewにカスタムディバイダーを表示するには、ListView XMLに次のパラメーターを簡単に追加できます。
XHTML android:divider = "@ android:color / transparent" android:dividerHeight = "5dp" 1 2 android:divider = "@ android:color / transparent" android:dividerHeight = "5dp" Android RecyclerViewの興味深い部分は、現在のところ、デフォルトではアイテム間の仕切りは表示されません。Googleの人たちは、これをカスタマイズのために意図的に省略しているに違いありません。しかし、これにより開発者の労力が大幅に増加します。アイテム間に仕切りを追加する場合は、RecyclerView.ItemDecorationクラスを使用してカスタム実装を行う必要がある場合があります。
または、公式サンプルのこのファイルを使用して、ハックを適用できます:DividerItemDecoration.java
7. OnItemTouchListener
リストビューは、クリックを検出するために、つまりAdapterView.OnItemClickListenerインターフェイスを使用することで、単純な実装を使用していました。
ただし、一方でRecyclerView.OnItemTouchListenerインターフェイスは、Android RecyclerViewでタッチイベントを検出するために使用されます。実装は多少複雑になりますが、開発者はタッチイベントをインターセプトするための制御を強化できます。公式ドキュメントによれば、RecyclerViewに配信される前にタッチイベントをインターセプトするため、ジェスチャー操作に役立つ場合があります。
RecyclerView
は、APIがはるかに優れているため、より高速で用途が広いためです。アイテムの追加または削除をアニメーション化するようなものRecyclerView
は、何もすることなくすでにに実装されています。それについては疑問の余地はありません。ListView
ゴミ箱に放り込んでくださいRecyclerView
。ショーを盗むための場所です。