Android 带有嵌套列表数据的RecyclerView
我正在使用Recyclerview显示一个数据,该数据可以如下所示:Android 带有嵌套列表数据的RecyclerView,android,android-recyclerview,Android,Android Recyclerview,我正在使用Recyclerview显示一个数据,该数据可以如下所示: Order FirstTypeOrders FirstTypeOrder[0] --title Item[0] --title Item[1] --title Item[2] --title FirstTypeO
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的标题。这里有一个想法:实际创建一个异构列表来表示展开的列表模型 假设列出的每个对象都有类:
FirstTypeOrder
、Item
和SecondTypeOrder
您只需遍历数据并将每个对象放入列表中
private List<Object> mFlattenedList = new ArrayList<>();
private List mFlattenedList=new ArrayList();
private void flant(列表顺序1、列表顺序2){
对于(第一种类型订单1:orders1){
mFlattenedList.add(order1);//获取标题
对于(项:order1.getItems()){
mFlattenedList.add(项目);
}
}
对于(第二种类型订单2:orders2){
mFlattenedList.add(order2);//获取标题
}
}
现在看看你有什么:
- 对于
返回列表大小getItemCount()
- 对于
,在bindViewHolder(ViewHolder holder,int位置)
位置有一个对象,可以从中绑定数据
- 对于
,使用getItemViewType(int位置)
处的position
对象确定要返回的视图类型instanceof
简单。请发布一些代码,这样我们至少可以看到您开始使用的数据结构。你看到了我对一个类似问题的回答。只需将数据视为树结构,并将其展平为一维列表。这并不难。发布你已经拥有的代码,我们会为你指出正确的方向。事实上,我还没有开始编码。我正在决定我现在应该或不应该使用的各种方法。我不希望有代码作为答案。只是对如何实现这一点有了清晰的认识。是的,我也想到了这个方法。只是我对使用有点怀疑。我理解,感觉你在规避整个类型的安全机制。我认为在这样的情况下有一个异构列表是有效的。您可以让您的类实现一个空的标记接口,并将其用于列表项类型(如果它让您感觉更好的话)
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
}
}