android - RecyclerView of heterogenous layouts is shuffling positions -


well, have recyclerview 2 layout types, looks following:

public class searchkeywordrecycler extends recyclerview.adapter<recyclerview.viewholder> {  public static final int type = 1, service = 2; private servicesviewholder serviceviewholder; private servicetypeviewholder servicetypeviewholder; private services services; private context context; private onsearchitemclicklistener onsearchitemclicklistener;  public searchkeywordrecycler(services services, onsearchitemclicklistener onsearchitemclicklistener) {     this.services = services;     this.onsearchitemclicklistener = onsearchitemclicklistener;     sethasstableids(true); }  @override public int getitemviewtype(int position) {     if (services.get(position).getserficetype() == 1) {         return type;     } else if (services.get(position).getserficetype() == 0) {         return service;     }     return position; }  @override public recyclerview.viewholder oncreateviewholder(viewgroup parent, int viewtype) {     context = parent.getcontext();     layoutinflater inflater = layoutinflater.from(context);     if (viewtype == type) {         view v = inflater.inflate(r.layout.item_search_service_type, parent, false);         servicetypeviewholder = new servicetypeviewholder(v);         return servicetypeviewholder;     } else if ((viewtype == service)) {         view v2 = inflater.inflate(r.layout.item_search_sevice, parent, false);         serviceviewholder = new servicesviewholder(v2);         return serviceviewholder;     }      return null; }  @override public long getitemid(int position) {     return services.get(position).hashcode(); }  @override public void onbindviewholder(recyclerview.viewholder holder, int position) {     service service = services.get(position);      switch (getitemviewtype(position)) {         case type:             servicetypeviewholder.setdata(service);             break;         case service:             serviceviewholder.setdata(service);             break;         default:     } }  @override public int getitemcount() {     return services.size(); }  public interface onsearchitemclicklistener {     void onclicklistener(int position); }  class servicesviewholder extends recyclerview.viewholder implements view.onclicklistener {     textview txtviewservice;      public servicesviewholder(view itemview) {         super(itemview);         txtviewservice = butterknife.findbyid(itemview, r.id.service_name);     }      public void setdata(service service) {         txtviewservice.settext(service.getservice_name());         if (service.gettype_name() != null) {             txtviewservice.settext(service.gettype_name());          }     }      @override     public void onclick(view v) {         onsearchitemclicklistener.onclicklistener(getadapterposition());     } }   class servicetypeviewholder extends recyclerview.viewholder {     textview txtviewtype;      public servicetypeviewholder(view itemview) {         super(itemview);         txtviewtype = butterknife.findbyid(itemview, r.id.servicetype);     }      public void setdata(service service) {         string name = service.gettype_name();         txtviewtype.settext(service.getservice_name());     }     } } 

the issue items' positions keep shuffling while scrolling recyclerview , needs keep order fixed in view.

as can notice, did used, 1- hasstableids(true) function, 2- used getitemid() suggested @ of satck answers , posts.

what doing wrong? thanks

the issue that, used serviceviewholder instance created mannually perform setdata() function in onminderholder(viewholder holder, int position);

after using holder instance brought me adapter itself, worked fine it's synchronizing holder instance matching position used retrieve object data array.


Comments

Popular posts from this blog

javascript - Create a stacked percentage column -

Optimising Firebase database by automatically overwriting data -

javascript - Angular UI-Grid customTemplate directive causing rows to load slowly/? -