[英]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);
这是在我的RecyclerAdapter
的onCreate()
方法中调用的。 然后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.Adapter
的onCreateViewHolder
方法中的视图类型,并膨胀相应的视图,然后绑定在onBindViewHolder(ViewHolder, int)
。
结果是不同内容的卡布局不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.