android - Dynamically Add header to recyclerView from arraylist using sort -


i have json converted model

 arraylist<model> data  

so want add header per type in json if there 2 different type in arraylist there 2 header in recyclerview , associated data list . current example have 2 typ2 - 1)name 2)value how can add 2 header in recyclerview , data having type name

json

{ "info": [     {         "id": 12,         "name": "hi",         "type": "name"     },     {         "id": 1,         "name": "hi1",         "type": "name"     },     {         "id": 13,         "name": "hi",         "type": "value"     },     {         "id": 15,         "name": "hi3",         "type": "name"     },     {         "id": 16,         "name": "hi",         "type": "value"     },     {         "id": 20,         "name": "hi5",         "type": "value"     },     {         "id": 24,         "name": "bye",         "type": "name"     },     {         "id": 12,         "name": "hi",         "type": "name"     } ] 

}see image fro details

i assume layout designs ready given image link. need 02 layout designs 1 header & footer in each item. now, can add header dynamically using adapter following:

public class yourrecyclerviewadapter extends recyclerview.adapter {      private final int view_item_header = 1;  // type: name/value     private final int view_item_footer = 0;      private list<pojomodel> mdata;     private context mcontext;      public yourrecyclerviewadapter(context context, list<pojomodel> data)     {         this.mcontext = context;         this.mdata = data;     }      @override     public recyclerview.viewholder oncreateviewholder(viewgroup parent, int viewtype) {         recyclerview.viewholder viewholder;         if (viewtype == view_item_header) {             view view = layoutinflater.from(parent.getcontext()).inflate(r.layout.item_header, parent, false);             viewholder = new headerholder(view);         } else {             view view = layoutinflater.from(parent.getcontext()).inflate(r.layout.item_footer, parent, false);             viewholder = new footerholder(view);         }         return viewholder;     }      @override     public void onbindviewholder(recyclerview.viewholder holder, int position) {         pojomodel item = mdata.get(position);         if (holder instanceof headerholder) {             headerholder mholder = (headerholder)holder;             // stuff         } else {             footerholder mholder = (footerholder)holder;             // stuff         }     }      @override     public int getitemviewtype(int position) {         return mdata.get(position) != null ? view_item_header : view_item_footer;     }      @override     public int getitemcount() {         return mdata.size();     }      public class headerholder extends recyclerview.viewholder {          public headerholder(view itemview) {             super(itemview);             // declare header views         }     }      public class footerholder extends recyclerview.viewholder {          public footerholder(view itemview) {             super(itemview);             // declare footer views         }     } }