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

时间:2016-02-24 02:00:51

标签: java android xml android-layout android-cardview

使用> make CXXADDON=-std=c++11 时,显示卡的特定布局非常简单。

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

更具体地说:

LayoutInflater

View largeCardView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_view, viewGroup, false); 的{​​{1}}方法中调用了哪个。 onCreate()方法然后返回此RecyclerAdapter。这非常有效,并且卡片在XML文件中显示时显示。

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

例如,如果我事先知道将会有一个字符串传递到卡片中的largeCardVew,并且此字符串只能有两个值" Large"和" Small",如何使用一种类型的XML文件与" Large"文本和另一个用于" Small"的XML文件。文本?

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

enter image description here

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

1 个答案:

答案 0 :(得分:3)

它与您创建单一卡片布局的方式类似,但不是只有一个.xml和一个ViewHolder,每个布局都需要拥有拥有< / em> .xml文件定义它,以及ViewHolder类。

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

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

就我而言,我想要有4种不同的卡片布局,因此我在自己的.xml文件中定义了每种卡片,并为它们指定了唯一的名称。然后,在我的RecyclerView.Adapter类中,我创建了一个单独的类,为每个布局扩展ViewHolder。我确保viewType数组中的每个整数与我的数据匹配,并调用getItemViewType

然后,我在onCreateViewHolder的{​​{1}}方法中检查视图类型,并对相应的视图进行充气,然后将其绑定到RecyclerView.Adapter

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