out of memory - Android InvalidStateException on ViewPager when setting page limit too small -
i have problem viewpager image slider gallery. setting page limit 3 app craches on third image because child has parent. set limit number because want avoid large memory leaks, event 3 images uses 150mb of allocated memory incredibly huge ammount. maybe if resize image before uploading can them work more pages ? anyways, here code viewpager:
viewpager mviewpager = (viewpager) findviewbyid(r.id.imagepager); vieweradapter adapter = new vieweradapter(this); //adapter.notifydatasetchanged(); mviewpager.setadapter(adapter); mviewpager.setoffscreenpagelimit(3); mviewpager.setcurrentitem(number); mviewpager.setonpagechangelistener(new viewpager.onpagechangelistener() { @override public void onpagescrolled(int position, float positionoffset, int positionoffsetpixels) { time.settext(caluculatetimeago(mainactivity.time[position])); if (mainactivity.distances[position] < 1000) { dist.settext(string.valueof(mainactivity.distances[position]) + "m"); } else { long f = (long) (mainactivity.distances[position] / 1000); dist.settext(string.valueof(f) + "km"); } author.settext(mainactivity.users[position]); text.settext(mainactivity.text1[position]+mainactivity.tags[position]); } @override public void onpageselected(int position) { } @override public void onpagescrollstatechanged(int state) { } });
and here adapter definition:
public class vieweradapter extends pageradapter { context mcontext; public vieweradapter(context context) { mcontext = context; mlayoutinflater = (layoutinflater) mcontext.getsystemservice(context.layout_inflater_service); } layoutinflater mlayoutinflater; @override public int getcount() { return mainactivity.imglink.length; } @override public boolean isviewfromobject(view arg0, object arg1) { return arg0 == (view) arg1; } @override public void destroyitem(viewgroup container, int position, object object) { container.removeview((view) object); picasso.with(container.getcontext()).cancelrequest((imageview) object); } @override public charsequence getpagetitle(int position) { return (position + "/" + getcount()); } @override public object instantiateitem(viewgroup container, int position) { final view itemview = mlayoutinflater.inflate(r.layout.pager_item,container,false); final imageview photo = (imageview) itemview.findviewbyid(r.id.photoslide); photo.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { fullscreen = ((bitmapdrawable)photo.getdrawable()).getbitmap(); intent intent = new intent(showmarkercontent.this, fullscreenimageactivity.class); startactivity(intent); } }); picasso.with(container.getcontext()).load("mywebsite" + mainactivity.imglink[position]).into(photo); container.addview(photo); return photo; } }
well, managed make work-around problem. forgot set cropping of photo , therefore photos large this. , also, set offscreenpagelimit 30 avoid error (this work-around because large quantity of image come out of memory error) now, here adapter code:
@override public object instantiateitem(viewgroup container, int position) { final view itemview = mlayoutinflater.inflate(r.layout.pager_item,container,false); final imageview photo = (imageview) itemview.findviewbyid(r.id.photoslide); photo.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { fullscreen = ((bitmapdrawable)photo.getdrawable()).getbitmap(); intent intent = new intent(showmarkercontent.this, fullscreenimageactivity.class); startactivity(intent); } }); picasso.with(container.getcontext()).load("mywebsite" + mainactivity.imglink[position]).fit().centercrop().into(photo); container.addview(itemview); return itemview; }
Comments
Post a Comment