android - Custom RecyclerView adapter generating heavy lag while using in viewpager -


my app's mainactivity class consist of viewpager around 10 tabs. inside each tab loading listitem using android recyclerview. problem occurs when user swipes right-left in viewpager. after debugging, found problem occurs inside customlistadapter.

i found lags increases if increases number of layout inflater inside oncreateviewholder.

@override public recyclerview.viewholder oncreateviewholder(viewgroup parent, int viewtype) {     recyclerview.viewholder viewholder;      // performance hit     view itemview = layoutinflater.from(parent.getcontext())                     .inflate(r.layout.list_row, parent, false);     view itemviewlast = layoutinflater.from(parent.getcontext())                     .inflate(r.layout.list_row_last, parent, false);     view itemviewdefault = layoutinflater.from(parent.getcontext())                     .inflate(r.layout.list_row_default, parent, false);      switch (viewtype) {         case 0:             viewholder = new myviewholder(itemview);             break;         case 3:             viewholder = new myviewholder(itemviewlast);             break;         default:             viewholder = new myviewholder(itemview1);             break;     }      return viewholder; } 

to reduce shifted layoutinflater inside switch case itself.

@override public recyclerview.viewholder oncreateviewholder(viewgroup parent, int viewtype) {     recyclerview.viewholder viewholder;      switch (viewtype) {         case 0:             // moved here             view itemview = layoutinflater.from(parent.getcontext())                     .inflate(r.layout.list_row, parent, false);             viewholder = new myviewholder(itemview);             break;         case 3:             // moved here             view itemviewlast = layoutinflater.from(parent.getcontext())                     .inflate(r.layout.list_row_last, parent, false);             viewholder = new myviewholder(itemviewlast);             break;         default:             // moved here             view itemviewdefault = layoutinflater.from(parent.getcontext())                     .inflate(r.layout.list_row_default, parent, false);             viewholder = new myviewholder(itemview1);             break;     }      return viewholder; } 

now still feel there lag left. question is, there way reduce lag or shift layout inflater outside of oncreateviewholder method?

myviewholder method:

public class myviewholder extends recyclerview.viewholder {         public textview title, rating, genre,detailmovie,moviename,movietime;         public imageview thumbnail, movienail;         public myviewholder(view view) {             super(view);             title = (textview) view.findviewbyid(r.id.title);             rating = (textview) view.findviewbyid(r.id.rating);             genre = (textview) view.findviewbyid(r.id.genre);             detailmovie = (textview) view.findviewbyid(r.id.detailmovie);             moviename = (textview) view.findviewbyid(r.id.moviename);             movietime = (textview) view.findviewbyid(r.id.movietime);             thumbnail = (imageview) view.findviewbyid(r.id.thumbnail);             movienail = (imageview) view.findviewbyid(r.id.moviethumbnail);         }     }  @override     public void onbindviewholder(recyclerview.viewholder viewholder, int position) {          switch (viewholder.getitemviewtype()) {             case 0:                 myviewholder vh1 = (myviewholder) viewholder;                 configureviewholder1(vh1, position);                 break;             case 3:                 myviewholder vh3 = (myviewholder) viewholder;                 configureviewholder1(vh3, position);                 break;             default:                 myviewholder vh4 = (myviewholder) viewholder;                 configureviewholder1(vh4, position);                 break;         }     }  private void configureviewholder1(myviewholder vh1, int position) {      final movie movie = movieitems.get(position);      vh1.title.settext(movie.gettitle());     vh1.rating.settext("rating: " + string.valueof(movie.getrating()));      glide.with(activity).         load(uri.parse(movie.getthumbnailurl())).         crossfade().         placeholder(r.drawable.placeholder).diskcachestrategy(diskcachestrategy.source).         donttransform().         into(vh1.thumbnail);      vh1.moviedetail.settext(string.valueof(movie.moviedetail()));     vh1.moviename.settext(string.valueof(movie.getmoviename()));     vh1.movietime.settext(string.valueof(movie.getmovietime()));      vh1.itemview.setonclicklistener(new view.onclicklistener() {          @override         public void onclick(view view) {             fragmentjump(movie);         }     }); } 

try using default caching strategy glide (diskcachestrategy.result), stores resulting image on cache, instead of storing hte full image. doing this, reduce amount of transformations aplied images (less processing -> less chances of dropping frames).


Comments

Popular posts from this blog

jquery - uncaught exception: DataTables Editor - remote hosting of code not allowed -

java - SSE Emitter : Manage timeouts and complete() -

java - How to resolve error - package com.squareup.okhttp3 doesn't exist? -