繁体   English   中英

如何针对不同的内容使用不同的卡片布局?

[英]How do I use different card layouts for varying content?

使用CardView ,显示卡的某个布局非常简单。

我为我的卡创建了一个XML布局,并使用LayoutInflater将该XML布局实例化为View。

进一步来说:

View largeCardView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_view, viewGroup, false);

这是在我的RecyclerAdapteronCreate()方法中调用的。 然后onCreate方法返回此largeCardVew 这非常有效,并且卡片在XML文件中显示时显示。

但是如果我想为不同的内容显示不同的卡呢? 是否可以针对不同的东西显示不同的卡片,但是将它们全部放在同一个RecyclerView

例如,如果我事先知道将有一个字符串传递到卡中的TextView ,并且此字符串只能有两个值“Large”和“Small”,我如何使用一种类型的XML文件来使用“大”文本和另一个与“小”文本一起使用的XML文件?

以下是一个示例(摘自Google Play ):

在此输入图像描述

正如您在图片中看到的,有两种不同的卡类型,具有不同的布局(忽略橙色按钮)。 有没有办法实现类似的东西,并在同一RecyclerView有卡?

它类似于创建单个卡布局的方式,但不是只有一个.xml和一个ViewHolder ,每个布局都需要有自己的 .xml文件来定义它,以及一个ViewHolder类。

发现非常重要的方法是RecyclerView.Adapter类中的getItemViewType(int position)方法。 默认情况下,此方法返回0,假设使用的是viewType的单个布局(在本例中为cardView )。 由于需要多种类型,我必须定义它们。

然后我创建了一个整数数组(称为cardViewTypes ),定义哪些布局用于哪种类型的数据。 由于您应该已经拥有某种卡片内容的数据集(无论是List还是HashMap ),因此确保数据与视图类型匹配非常重要。

在我的情况下,我想要有4种不同的卡布局,所以我在他们自己的.xml文件中定义了每个,并为它们提供了唯一的名称。 然后,在我的RecyclerView.Adapter类中,我创建了一个单独的类,为每个布局扩展了ViewHolder 我确保我的viewType数组中的每个整数都与我的数据匹配并调用getItemViewType

然后我检查RecyclerView.AdapteronCreateViewHolder方法中的视图类型,并膨胀相应的视图,然后绑定在onBindViewHolder(ViewHolder, int)

结果是不同内容的卡布局不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM