带有未知/可变行布局的RecyclerView

时间:2016-10-17 00:37:24

标签: java android android-recyclerview

由于RecyclerView使用ViewHolders,这意味着您必须为每一行预定义布局。但是,如果每行需要显示可变数量的视图呢?

例如,假设我正在创建一个即时消息应用程序,用户可以将图片附加到消息中。他们可以附加从0到x图片的任何地方。当您创建RecyclerView以显示这些图片(从服务器下载)时,如何使行包含正确数量的ImageView以显示它们?

有几种方法可以让我想到这样做,但没有一种方法看起来像是不错的选择。

  1. 在onBindViewHolder中创建ImageViews,将它们添加到ViewHolder中的布局中。 (这不是ViewHolder试图阻止的吗?这可能是滞后的,特别是有很多图片)
  2. 限制用户可以将消息附加到x的图片数量,然后将x ImageViews添加到设置为不可见/消失的布局中。在onBindViewHolder中,设置ImageViews以显示图片并将这些ImageView设置为可见。 (如果我允许附加图片和视频怎么办?我是否还需要添加x ImageViews和x VideoViews?)
  3. 在每个RecyclerView项目中放置一个GridView并填充GridView 在onBindViewHolder中。 (我认为这没有任何好处 选项#1,因为它几乎是一样的东西?)
  4. 这就是我所能想到的。有没有其他选择是针对我没有遇到的这种情况而设计的?或者针对这个问题采取的典型方法是什么?

1 个答案:

答案 0 :(得分:0)

您需要创建一个异构的RecyclerView,它会显示多个不同的ViewHolder。有几种方法可以实现这一目标。

基本方法是,根据与RecyclerView.Adapter中每个项目关联的照片/视频数量,您将覆盖getItemViewType(int position)(属于RecyclerView.Adapter类的方法)返回不同的int。此int是传递到viewType的{​​{1}}参数。然后,您将使用基于createViewHolder(ViewGroup parent, int viewType)参数的正确ViewHolder /布局。

有关优秀教程,请参阅here

如果您不介意使用库替代方法,我建议使用AdapterDelegates

相关问题