RecyclerView与嵌套列表数据

时间:2016-11-12 21:55:02

标签: android android-recyclerview

我正在使用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的标题。

1 个答案:

答案 0 :(得分:2)

这里有一个想法:实际上创建一个异构列表来表示扁平列表模型

我们假设您为列出的每个对象都有课程:FirstTypeOrderItemSecondTypeOrder

您只需遍历数据并将每个对象放入列表中。

      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对象来确定要返回的视图类型。

简单。