使用> 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):
正如您在图片中看到的,有两种不同的卡类型,具有不同的布局(忽略橙色按钮)。有没有办法实现类似的事情,并将卡片放在同一个RecyclerView
?
答案 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
。
结果是不同内容的卡片布局不同。