Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 带有嵌套列表数据的RecyclerView_Android_Android Recyclerview - Fatal编程技术网

Android 带有嵌套列表数据的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

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

这里有一个想法:实际创建一个异构列表来表示展开的列表模型

假设列出的每个对象都有类:
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
          }

      }