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
Post a Comment