web-dev-qa-db-ja.com

RecyclerViewとListView

Android開発者から( リストとカードの作成 ):

RecyclerViewウィジェットは、ListViewのより高度で柔軟なバージョンです。

さて、それはクールに聞こえますが、私はこの例の写真を見たとき、私はこれら二つの違いについて本当に混乱しました。

enter image description here

上の図はカスタムアダプタを使ってListViewで簡単に作成できます。

それで、どんな状況でRecyclerViewを使うべきですか?

255
Blaze Tama

RecyclerViewListViewの改良として作成されたので、ListViewコントロールを使用して添付リストを作成できますが、RecyclerViewを使用する方が簡単です。

  1. 上/下にスクロールしながらセルを再利用 - これはListViewアダプタにView Holderを実装することで可能ですが、RecycleViewではアダプタのデフォルトの記述方法ですが、これはオプションのことです。

  2. リストをそのコンテナから切り離す - したがって、LayoutManagerを設定することで、実行時にリスト項目をさまざまなコンテナ(linearLayout、gridLayout)に簡単に配置できます。

例:

mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//or
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
  1. 共通リストアクションをアニメーション化します - アニメーションは分離され、ItemAnimatorに委譲されます。

RecyclerViewについての詳細がありますが、私はこれらの点が主なものだと思います。

したがって、結論として、RecyclerViewは、懸念の委任のパターンに従った「リストデータ」を処理するためのより柔軟なコントロールであり、それ自体は1つのタスク、つまりリサイクル項目のみになります。

338
daneejela

リストビューのパフォーマンスを向上させるには、ホルダーパターンを実装する必要があります。特に、リストにいくつかの異なる種類のビューを追加する場合は、簡単にめちゃくちゃになります。

RecyclerViewはこのパターンを組み込んでいるので、めちゃくちゃにするのがより難しくなります。また、グリッドのように直線的ではないさまざまなレイアウトをより簡単に処理できるようになります。

35
CaptRespect

ListViewRecyclerViewの先祖です。 ListViewがしなかったことも、うまくいかなかったこともたくさんありました。 ListViewの欠点を集めて、問題をさまざまな分野に抽象化することで問題を解決するとしたら、リサイクル業者の見解のようなものになってしまいます。これがListViewsの主な問題点です。

  • Viewを強制しませんでした同じ項目タイプを再利用します(ListViewで使用されているアダプタの1つを見てください。getViewメソッドを調べると、プログラマが行ごとに新しいビューを作成するのを妨げるものは何もありません) convertView変数を介して渡されます

  • 高価なfindViewByIdの使用を妨げませんでした(上記のようにビューをリサイクルしていたとしても、開発者がfindViewByIdを呼び出して子ビューの表示内容を更新することは可能でした。ViewHolderListViewsパターンの主な目的はfindViewById呼び出しをキャッシュすることですただし、これはプラットフォームの一部ではないため、知っている場合にのみ利用できます。

  • 行を表示するビューでの垂直スクロールのみをサポートします(リサイクルビューはビューの配置場所や移動方法を気にしないため、LayoutManagerに抽象化されています。したがって、Recyclerは上記のような従来のListViewをサポートできます。 GridView、しかしそれだけにとどまらず、もっと多くのことができますが、それを実現するためにはプログラミングの作業をする必要があります。

  • 追加/削除されるアニメーションは、考慮されたユースケースではありませんでした。これがどのように行われるかを理解するのは完全にあなた次第でした(RecyclerViewを比較してください。アダプタクラスは通知を提供します*メソッド提供v対ListViews)。

手短に言うと、RecyclerViewListViewをより柔軟に扱うためのものですが、あなたの側でもっとコーディングをする必要があるかもしれませんが。

33
Jim Baca

RecyclerViewは、同様の方法でアダプタベースのビューをレンダリングするために準備された新しいViewGroupです。これはListView and GridViewの後継であるとされており、latest support-v7 versionにあります。RecyclerView拡張性を念頭に置いて開発されているので、あなたが考えることができるどんな種類のレイアウトを作成することも可能ですが、少し苦労することなく。

Antonio leiva からの回答

 compile 'com.Android.support:recyclerview-v7:27.0.0'

RecyclerViewは実際にListViewよりもpowerful viewです。詳しくは このページ をご覧ください。

20
IntelliJ Amiya

以下は、RecyclerViewとListViewの間のいくつかの要点/相違点です。賢く電話を取ります。

ListViewが機能する場合は、移行する必要はありません。もしあなたが新しいUIを書いているなら、RecyclerViewを使った方が良いかもしれません。

RecylerViewにはViewHolderが組み込まれています。listViewのように独自に実装する必要はありません。特定のインデックスでの通知もサポート

アイテムの追加や削除のアニメーション化などは、何もしなくてもRecyclerViewにすでに実装されています。

レイアウトマネージャをRecyclerViewに関連付けることができます。これは、リサイクルビューでランダムビューを取得するために使用できます。これは、リストビューでの制限事項でした。リストビューでは、利用可能なビューのタイプは垂直リストビューのみです。水平リストビューを実装する公式な方法さえありません。今RecyclerViewを使用して、我々は持つことができます

i)LinearLayoutManager - 垂直方向と水平方向の両方のリストをサポートします。ii)StaggeredLayoutManager - Pinterestのようなスタガードリストをサポートします。iii)GridLayoutManager - Galleryアプリケーションで見られるグリッドの表示をサポートします。

そして最良のことは、必要に応じてこれらすべてを動的に実行できることです。

16

主な利点:

ViewHolderは、デフォルトではListViewでは使用できません。 getView()内に明示的に作成します。 RecyclerViewにはViewholderが組み込まれています。

13

リストビューに対するRecyclerViewの利点:

  1. デフォルトでViewHolderを含みます。

  2. 簡単なアニメーション.

  3. 水平レイアウト、グリッドレイアウト、スタガードレイアウトをサポート

RecyclerViewに対するlistViewの利点:

  1. 仕切りを追加するのは簡単。

  2. 単純なプレーンリストに作り付けのarrayAdapterを使うことができます

  3. ヘッダーとフッターをサポートします。

  4. OnItemClickListnerをサポートします。

4
Manohar Reddy

私が持っている最大かつ最大の違いは、ListViewはそれを作成または配置するときにアイテムの位置を探すのに対し、RecyclerViewはアイテムの種類を探すということです。同じ型で作成された別の項目がある場合、RecyclerViewはそれを再作成しません。最初のアダプタに要求し、次にリサイクルプールを要求します。リサイクルプールに「そうしたタイプを作成しました」と表示されている場合、RecyclerViewは同じタイプを作成しようとしません。 ListViewにはこの種のプール機構はありません。

3
Mustafa Güven

上記の違いに加えて、次の点がいくつかあります。

  1. RVは、ビューの作成とビューへのデータのバインドを分離します。 LVでは、データをバインドする前に、convertViewがnullかどうか、またはビューを作成するかどうかを確認する必要があります。そのため、RVの場合、ビューは必要なときにのみ作成されますが、LVの場合、convertviewのチェックを外すことができ、毎回ビューを作成します。

  2. GridとListの切り替えは、LayoutManagerを使ってより簡単になりました。

  3. 単一のアイテムのみが変更された場合でも、すべてのアイテムに通知して更新する必要はありません。

  4. LVの場合、ビューキャッシングを実装する必要がありました。デフォルトでRVに提供されています。 (ビューキャッシュとリサイクルの違いがあります。)

  5. RVの場合はとても簡単なアイテムアニメーション。

3
Virat18

私はRecyclerViewで少し作業をしましたが、それでもListViewを好みます。

  1. もちろん、どちらもViewHoldersを使っているので、これは利点ではありません。

  2. RecyclerViewはコーディングがより困難です。

  3. RecyclerViewはヘッダーとフッターを含まないので、マイナスです。

  4. ListViewはViewHolderを作成する必要はありません。セクションやサブヘッダーを含むリストを作成したい場合は、(ViewHolderなしで)独立した項目を作成するのが賢明です。個別のクラスを必要としません。

2
CoolMind

私の意見では、RecyclerViewは開発者の生活をより困難にしていたので、リストビューで使用されるリサイクルパターンの問題に対処するために作られました。他のすべてはあなたが多かれ少なかれ扱うことができます。例えば、私はListViewGridViewに同じアダプターを使用しますが、両方のビューでgetViewgetItemCountgetTypeCountが使用されているので問題ありません。 RecyclerView付きのListViewまたはグリッドアダプタ付きのListAdapterがすでに機能している場合、GridViewは不要です。リストビューでViewHolderパターンが正しく実装されていれば、RecycleViewに比べて大きな改善は見られません。

2
aimiliano
  1. クリックリスナーを提供するためにインターフェースを使うことができます。私はListViewsでもこのテクニックを使います。
  2. 分割線なし:幅がmatch_parent、高さが1dpのビューを行に追加して、背景色を付けるだけです。
  3. 行の背景にStateListセレクターを使用するだけです。
  4. リストビューでもaddHeaderViewを避けることができます。単にヘッダをビューの外側に置くだけです。

そのため、効率が重要な場合は、ListViewをRecyclerViewに置き換えることをお勧めします。

1
Jay Patel

RecyclerView info

RecyclerViewAndroid 5.0 (Lollipop)で導入されました。 サポートライブラリ に含まれています。したがって、Android AP​​Iレベル7と互換性があります。

ListViewと同様に、RecyclerView’sの主なアイデアは、パフォーマンスに優しい方法でリスト機能を提供することです。このビューの名前の「リサイクル業者」の部分は偶然そこにありません。 RecyclerViewは、現在動作しているアイテムを実際にリサイクルできます。リサイクルプロセスは View Holder というパターンのおかげで行われます。

RecyclerViewの長所と短所

長所:

  • アイテムを追加、更新、削除するための統合されたアニメーション
  • viewHolderパターンを使用して、ビューのリサイクルを強制します
  • グリッドとリストの両方をサポート
  • 垂直および水平スクロールをサポート
  • diffUtilと一緒に使用できます

短所:

  • 複雑さが増す
  • onItemClickListenerなし

リストビュー情報

ListViewは、Androidの最初から存在しています。 API Level 1でも利用可能であり、RecyclerViewと同じ目的があります。

ListViewの使用方法は実際には非常に簡単です。この点では、後継者とは異なります。学習曲線は、RecyclerViewの場合よりも滑らかです。したがって、把握しやすいです。 LayoutManager、ItemAnimator、DiffUtilのようなものを扱う必要はありません。

ListViewの長所と短所

長所:

  • 簡単な使い方
  • デフォルトのアダプター
  • 利用可能なOnItemClickListener
  • ExpandableListViewの基盤です

短所:

  • viewHolderパターンの使用を受け入れない
0
Basi

簡単な答え:あなたがたくさんのアイテムを見せたい、そしてそれらの数が動的である状況でRecyclerViewを使うべきです。 ListViewは、項目数が常に同じで画面サイズに制限がある場合にのみ使用してください。

Androidライブラリを念頭に置いて考えているため、難しいと感じています。

今日、あなたがあなた自身のアダプタを構築するのを手助けするたくさんのオプションが存在していて、あなたが選ぶことができる動的なアイテムのリストとグリッドを構築するのを簡単にします.

怖くないでRecyclerViewを試してみると、ListViewとRecyclerViewにWebからダウンロードした100項目のリストを作成して好きになることができます(UX(ユーザー)の違いがわかります)。あなたがスクロールしようとすると、おそらくあなたがそれをすることができる前にテストアプリは止まるでしょう。

簡単なアダプタを作るために、この2つのライブラリをチェックすることをお勧めします。

mikepenzによるFastAdapter

FlexibleAdapter by davideas

0
Erick Moya