2016-10-17 14 views
0

RecyclerViewはViewHoldersを使用するため、各行にあらかじめ定義されたレイアウトが必要です。しかし、各行に表示されるビューの量が変わる必要がある場合はどうでしょうか?未知/可変行レイアウトのRecyclerView

たとえば、ユーザーがメッセージに画像を添付できるインスタントメッセージングアプリケーションを作成しているとします。彼らは0からx写真のどこにでも付けることができました。 RecyclerViewを作成して(サーバーからダウンロードした)これらの画像を表示するとき、それらの画像を表示するために正しい行数を含むようにするにはどうすればよいですか?

私はこれを行うと考えることができますが、本当に良いオプションのようには見えません。

  1. ImageViewsをonBindViewHolderで作成し、ViewHolderのレイアウトに追加します。 (これは、ViewHolderが防止しようとしているものではないでしょうか?これはおそらく、画像がたくさんある場合は遅くなるでしょう)
  2. ユーザーがメッセージに添付できる写真の量をxに制限し、x ImageViewsを目に見えない/行っていません。 onBindViewHolderで、画像を表示し、これらのImageViewを表示するようにImageViewsを設定します。 (&の画像を添付する場合は、x ImageViewsとx VideoViewsも追加する必要がありますか?)
  3. 各RecyclerViewアイテムにGridViewを配置し、GridView をonBindViewHolderの中に埋め込みます。 (これはほとんど同じことなので、 オプション#1よりも利点がないと思われます)。

これはすべて私が考えることのできることです。このような状況のために設計された他の選択肢はありませんか?あるいは、この問題に向けた典型的なアプローチは何ですか?

答えて

0

異種のものを作成する必要があります。RecyclerViewは、複数の異なるViewHolderを表示します。これを達成するにはいくつかの方法があります。

基本的なアプローチがあるという点で、各アイテムに関連付けられた写真/動画の数に基づいて、あなたのRecyclerView.Adapterあなたが異なるintを返すためにgetItemViewType(int position)RecyclerView.Adapterクラスの一部である方法)をオーバーライドします。このintcreateViewHolder(ViewGroup parent, int viewType)に渡されたviewTypeパラメータです。その後、viewType引数に基づいて正しいViewHolder /レイアウトを使用します。

良いチュートリアルについては、hereを参照してください。

ライブラリを別の方法で使用しても構わない場合は、AdapterDelegatesをお勧めします。

+0

私はRecyclerViewで異なるビュータイプについて知っていますが、これは私の問題とは関係ありません。ビューの種類は行に異なるレイアウトを適用するためのものですが、行には静的レイアウトがあるものとします。私は、RecyclerViewアイテムがレイア​​ウト内でさまざまなビュー数を持つソリューションが必要です。 – user7028506

+0

私は参照してください。私はあなたの2番目の提案されたアイデアを1人の視聴者を使って行い、行コンテンツに基づいて表示/非表示にするか、アイデア2のようにイメージとビデオの数を制限しますが、可能な組み合わせを表す別々のビューアを作成します。 –

関連する問題