我正在使用Recyclerview来显示可以这样显示的数据:
Order
FirstTypeOrders
FirstTypeOrder[0]
--title
Item[0]
--title
Item[1]
--title
Item[2]
--title
FirstTypeOrder[1]
--title
Item[0]
--title
Item[1]
--title
Item[2]
--title
SecondTypeOrders
SecondTypeOrder[0]
--title
SecondTypeOrder[1]
--title
我在getItemViewType()中遇到了一个问题,我无法弄清楚分离视图类型的逻辑。我有三种视图类型:一种用于显示所有FirstTypeOrders的标题,一种用于显示FirstTypeOrders中的项目,一种用于显示所有SecondTypeOrders的标题。
答案 0 :(得分:2)
这里有一个想法:实际上创建一个异构列表来表示扁平列表模型
我们假设您为列出的每个对象都有课程:FirstTypeOrder
,Item
和SecondTypeOrder
。
您只需遍历数据并将每个对象放入列表中。
private List<Object> mFlattenedList = new ArrayList<>();
...
private void flatten(List<FirstTypeOrder> orders1, List<SecondTypeOrder> orders2) {
for (FirstTypeOrder order1 : orders1) {
mFlattenedList.add(order1); // to get the title
for (Item item : order1.getItems()) {
mFlattenedList.add(item);
}
}
for (SecondTypeOrder order2 : orders2) {
mFlattenedList.add(order2); // to get the title
}
}
现在看看你有什么:
getItemCount()
返回列表大小。
对于bindViewHolder(ViewHolder holder, int position)
,您有position
的对象可以从中绑定数据。
对于getItemViewType(int position)
,请使用instanceof
处的position
对象来确定要返回的视图类型。
简单。