Android開発者から(リストとカードの作成):
RecyclerViewウィジェットは、ListViewのより高度で柔軟なバージョンです。
いいですね。でも、この例の画像を見て、これら2つの違いを本当に混乱しました。
上の画像はListView
、カスタムアダプターを使用して簡単に作成できます。
それでは、どのような状況で使用する必要がありますRecyclerView
か?
Android開発者から(リストとカードの作成):
RecyclerViewウィジェットは、ListViewのより高度で柔軟なバージョンです。
いいですね。でも、この例の画像を見て、これら2つの違いを本当に混乱しました。
上の画像はListView
、カスタムアダプターを使用して簡単に作成できます。
それでは、どのような状況で使用する必要がありますRecyclerView
か?
回答:
RecyclerView
はListView
改善として作成されたので、はい、ListView
コントロール付きの添付リストを作成できますが、使用する方RecyclerView
が簡単です。
上下にスクロールしながらセルを再利用します -これは、ListView
アダプターにビューホルダーを実装することで可能ですが、RecycleView
アダプターを作成するデフォルトの方法である一方で、オプションでした。
リストをそのコンテナーから切り離しますLayoutManager
。設定を使用して、実行時にリスト項目をさまざまなコンテナー(linearLayout、gridLayout)に簡単に配置できます。
例:
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//or
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
ItemAnimator
ます。についてはもっとありRecyclerView
ますが、これらの点が主なものだと思います。
したがって、結論として、RecyclerView
懸念の委任のパターンに従って「リストデータ」を処理するためのより柔軟なコントロールがあり、それ自体が1つのタスク(アイテムのリサイクル)に委ねられます。
リストビューのパフォーマンスを向上させるには、ホルダーパターンを実装する必要があります。特に、リストに複数の種類のビューを設定する場合は、簡単に失敗します。
RecyclerViewはこのパターンを焼き込み、失敗するのをより困難にします。また、より柔軟で、グリッドのように直線ではないさまざまなレイアウトを簡単に処理できます。
ListView
はの祖先RecyclerView
です。ListView
うまくいかなかったり、うまくいかなかったりすることがたくさんありました。の欠点を収集しListView
、問題をさまざまなドメインに抽象化することで問題を解決した場合、最終的にはリサイクラービューのようなものになります。リストビューの主な問題点は次のとおりです。
View
同じ項目タイプの再利用を強制しませんでした(で使用されているアダプターの1つをListView
見てください。getViewメソッドを調べると、1つが渡されても、プログラマーがすべての行に新しいビューを作成することを妨げるものがないことがわかります。convertView
変数を介して)
コストのかかるfindViewById
使用を防止しませんでした(上記のようにビューをリサイクルしている場合でも、開発者が呼び出しfindViewById
て子ビューの表示されたコンテンツを更新することが可能でした。ViewHolder
パターンの主な目的はListViews
、findViewById
呼び出しをキャッシュすることでした。ただし、これはプラットフォームの一部ではなかったため、それについて知っていれば利用可能です)
行が表示されたビューでサポートされる垂直スクロールのみ(リサイクラービューは、ビューの配置場所や移動方法は関係ありません。ビューはに抽象化されますLayoutManager
。したがって、リサイクラーは、ListView
上記のような従来型だけGridView
でなく、これに限定されるわけではありませんが、もっと多くのことができますが、それを実現するにはプログラミングのフットワークを行う必要があります)。
追加/削除されるアニメーションは、考慮された使用例ではありませんでした。これをどのように行うかを理解するのは完全にあなた次第です(RecyclerViewを参照してください。アダプタークラスのnotify *メソッドとvViewListを比較して、アイデアを取得してください)。
要するにRecyclerView
、より柔軟な方法ですが、ListView
ユーザー側でより多くのコーディングが必要になる場合があります。
RecyclerView
同様に任意のアダプタベースのビューをレンダリングするために準備された新しいのViewGroupです。の後継でListView and GridView
あると考えられており、にありlatest support-v7 version
ます。RecyclerView
で開発された拡張性ではなく、少し痛み・イン・ザ・尻線量のない、ので、あなたが考えることができるレイアウトのいずれかの種類を作成することができ、心インチ
Antonio leivaからの回答
compile 'com.android.support:recyclerview-v7:27.0.0'
RecyclerView
確かにpowerful view
よりListView
です。詳細については、このページをご覧ください。
以下は、RecyclerViewとListViewのいくつかの重要なポイント/違いです。賢くあなたの電話を取ってください。
ListViewが機能する場合、移行する理由はありません。新しいUIを作成している場合は、RecyclerViewの方がよいでしょう。
RecylerViewにはViewHolderが組み込まれており、listViewのように独自に実装する必要はありません。特定のインデックスでの通知もサポートします
アイテムの追加または削除のアニメーションなどは、何もすることなくRecyclerViewにすでに実装されています
レイアウトマネージャーをRecyclerViewに関連付けることができます。これは、ListViewでの制限でしたが、RecycleViewでランダムなビューを取得するために使用できます。水平方向のListViewを実装する公式な方法はありません。RecyclerViewを使用して、
i)LinearLayoutManager-垂直リストと水平リストの両方をサポートします。ii)StaggeredLayoutManager-スタッガードリストのようなPinterestをサポートします。iii)GridLayoutManager-ギャラリーアプリに表示されるグリッドの表示をサポートします。
そして、最良のことは、これらすべてを必要に応じて動的に実行できることです。
主な利点:
ViewHolder
では、デフォルトでは使用できませんListView
。内に明示的に作成しgetView()
ます。
RecyclerView
作り付けていViewholder
ます。
上記の違いに加えて、次のような違いがあります。
RVは、ビューの作成とビューへのデータのバインドを分離します。LVでは、ビューを作成するためにデータをバインドする前に、convertViewがnullかどうかを確認する必要があります。したがって、RVの場合、ビューは必要な場合にのみ作成されますが、LVの場合、convertviewのチェックに失敗し、毎回ビューを作成します。
LayoutManagerを使用すると、グリッドとリストの切り替えがさらに簡単になりました。
1つのアイテムのみが変更された場合でも、すべてのアイテムに通知して更新する必要はありません。
LVの場合、ビューキャッシングを実装する必要がありました。これはデフォルトでRVで提供されます。(ビューキャッシングとリサイクルには違いがあります。)
RVの場合の非常に簡単なアイテムアニメーション。
リストビューに対するRecyclerViewの利点:
デフォルトでViewHolderを含みます。
簡単なアニメーション。
水平、グリッド、千鳥配置のレイアウトをサポート
recyclerViewに対するlistViewの利点:
仕切りの追加も簡単。
単純なプレーンリストに組み込みのarrayAdapterを使用できます
ヘッダーとフッターをサポートします。
OnItemClickListnerをサポートします。
recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL));
何かをやった後recyclerView = view.findViewById(R.id.feed);
1. ViewHolderパターン
findViewById()メソッドの呼び出しを減らすために使用されるパターン。
ListViewでは、ViewHolderを使用せずにリストを簡単に作成できます。しかし、RecyclerViewの場合はそうではありません。
2.アダプター
はい、どちらもAdapterViewsです。アダプタークラスに基づいて動作します。
ArrayAdapter、CursorAdapterなどのデフォルトアダプターを使用してListViewを構築するのは簡単ですが、RecyclerViewはRecyclerView.Adapterクラスを提供し、新しいカスタムアダプタークラスを作成します。
RecyclerViewでArrayAdapterまたはその他の組み込みアダプターを使用することはできません。
3.アイテムの配置
シンプルで少ないコードで垂直リストビューを作成しました。しかし、GridViewを作成する必要がある場合はどうでしょうか。
RecyclerViewは、LayoutManagerを使用してアイテムを配置します。3つのLayoutManagerクラスがあります。
アニメーション
ListViewには基本的なアニメーションがありません。ただし、RecyclerViewには単純なアニメーションが付属しています。
分周器
アンドロイド:ディバイダとアンドロイド:dividerHeight属性またはsetDivider()、setDividerHeight()あなたは、リストビューでカスタム分周器を作るのに役立ちます。
25.1.0以降、DividerItemDecorationクラスを使用して単純な仕切りを作成できます。
クリックイベント
RecyclerViewにはOnItemClickListenerがありません。これはとても悲しいことです。しかし、RecyclerView.OnItemTouchListenerを提供することにより、開発者により多くの制御を提供します。
通知方法
正しいアニメーションを実行するには、適切なnotify *メソッドを呼び出す必要があります。RecylcerViewには、ListViewと比較したときに多くのnotify *メソッドがあります。
彼らが持っている主な最大の違いは、ListView
それを作成または配置するときにアイテムの位置をRecyclerView
探すことですが、一方でアイテムのタイプを探すことです。同じタイプで作成された別のアイテムがある場合、それは再度作成されRecyclerView
ません。最初にアダプターを要求し、次にリサイクルプールを要求します。リサイクルプールが「ええ、それに似たタイプを作成しました」と言った場合、RecyclerView
同じタイプを作成しようとしません。ListView
この種のプーリングメカニズムはありません。
私の意見でRecyclerView
は、リストビューで使用されるリサイクルパターンの問題に対処するために作成されました。これは、開発者の生活をより困難にしていたためです。他のすべては多かれ少なかれ扱うことができます。たとえば、私はのために同じアダプタを使用ListView
し、GridView
それが両方のビューには関係ありませんgetView
、getItemCount
、getTypeCount
それは同じですので、使用されています。
RecyclerView
場合に必要とされていないListView
とListAdapter
か、GridView
すでにあなたのために働いているグリッドアダプタを備えました。ViewHolder
リストビューにパターンを正しく実装していれば、に対する大きな改善は見られませんRecycleView
。
私は少し働いてRecyclerView
、それでも好きListView
です。
もちろん、どちらもを使用ViewHolders
しているため、これは利点ではありません。
A RecyclerView
はコーディングがより困難です。
AにRecyclerView
はヘッダーとフッターが含まれていないため、マイナスです。
A ListView
はViewHolderを作成する必要はありません。セクションまたはサブヘッダーを含むリストが必要な場合は、独立したアイテム(ViewHolderなし)を作成することをお勧めします。これは簡単で、個別のクラスを必要としません。
簡単な答え:多くのアイテムを表示したい状況でRecyclerViewを使用する必要があり、アイテムの数は動的です。ListViewは、項目の数が常に同じで、画面サイズに制限されている場合にのみ使用してください。
Androidライブラリを念頭に置いて考えているだけなので、さらに難しくなります。
今日、独自のアダプターを構築するのに役立つ多くのオプションが存在し、選択、並べ替え、アニメーション、ディバイダーの使用、フッター、ヘッダーなどの追加などが可能な動的アイテムのリストとグリッドを簡単に構築できます。
怖がらないでRecyclerViewを試してみてください。ListViewとRecyclerViewでWebからダウンロードされた100個のアイテム(Facebookのニュースなど)のリストを作成すると、UX(ユーザーの違いがわかります。経験)スクロールしようとすると、おそらくそれを行う前にテストアプリが停止します。
簡単なアダプターを作成するには、この2つのライブラリーを確認することをお勧めします。
RecyclerView情報
はでRecyclerView
導入されましたAndroid 5.0 (Lollipop)
。サポートライブラリに含まれています。したがって、Android APIレベル7と互換性があります。
と同様にListView
、RecyclerView’s
主なアイデアは、パフォーマンスに適した方法でリスト機能を提供することです。このビューの名前の「Recycler」の部分は偶然そこにはありません。RecyclerView
実際には、現在働いているとアイテムをリサイクルすることができます。リサイクルプロセスは、ビューホルダーと呼ばれるパターンのおかげで行われます。
RecyclerViewの長所と短所
長所:
短所:
ListView情報
ListView
非常にアンドロイドの初めから出回っていました。でも利用可能で、API Level 1
と同じ目的がありRecyclerView
ます。
ListViewの使い方は実際には非常に簡単です。この点では、後継者とは異なります。学習曲線は、RecyclerViewの曲線よりも滑らかです。したがって、把握しやすくなります。LayoutManager、ItemAnimator、DiffUtilなどを処理する必要はありません。
ListViewの長所と短所
長所:
ExpandableListView
短所: