android - Lazy loading ViewPagers in a ScrollView -


im trying inflate multiple viewpagers scrollview each viewpager using fragmentstatepageradapter.

the viewpager consist of fragments 3 imageviews each page.

im using universalimageloader async loading of images cant lazy load work.

the problem when app inflating lets 10 viewpagers 3 imageviews each trippleposterfragment1, , 10 viewpagers 3 imageviews trippleposterfragment2 since mpager.setoffscreenpagelimit(1) kicks in.

its total of 60 async requests firing during progresslayout visible.

my mainfragment following method:

private void rendersubcarousels(arraylist<carousel> carousels) {      layoutinflater minflater = (layoutinflater)getactivity().getsystemservice(context.layout_inflater_service);      int = 1;      linearlayout subcarousellayout = (linearlayout) mscrollview.findviewbyid(r.id.index_subcategory_carousel_container);      (final carousel carousel : carousels) {          relativelayout carouselwrapper = (relativelayout) minflater.inflate(r.layout.main_pager_layout, null);         linearlayout mcontainer = (linearlayout) carouselwrapper.findviewbyid(r.id.main_pager_container);         mcontainer.setid(constants.baseid_linearlayout + i);          viewpager mpager = (viewpager) mcontainer.findviewbyid(r.id.main_pager);            mpager.setid(constants.baseid_viewpager + i);         mpager.setadapter(new pagerposteradapter(getfragmentmanager(),constants.triple_posters, carousel));         subcarousellayout.addview(carouselwrapper);         i++;     }     progresslayout.setvisibility(view.gone); } 

my fragmentstatepageradapter:

public class pagerposteradapter extends fragmentstatepageradapter {     private int mpagesize;     private carousel mcarousel;      public pagerposteradapter(fragmentmanager fm, int pagesize, carousel carousel) {         super(fm);         this.mpagesize = pagesize;         this.mcarousel = carousel;     }      @override     public int getcount() {         int maxpageindex = (int) math.ceil((float) mcarousel.getassets().size() / mpagesize);              return maxpageindex;     }      @override     public fragment getitem(int position) {         arraylist<asset> assets = mcarousel.getassets();         int = position*mpagesize;         int = (position+1)*(mpagesize);         if(to > assets.size()-1)             = assets.size();          return (trippleposterfragment.newinstance(assets.sublist(from,  to)));     } } 

the trippleposterfragment imageview rendering happens:

private void initviews() {      imageview mfirstimageview = (imageview) mlinearlayout.findviewbyid(r.id.first_pager_poster);             imageview msecondimageview = (imageview)mlinearlayout.findviewbyid(r.id.second_pager_poster);     imageview mthirdimageview = (imageview)mlinearlayout.findviewbyid(r.id.third_pager_poster);      for(int = 0;i < assets.size(); i++){          imageview image = null;          switch(i){         case 0:             image = (imageview) mlinearlayout.findviewbyid(r.id.first_pager_poster);             break;               case 1:             image = (imageview) mlinearlayout.findviewbyid(r.id.second_pager_poster);                 break;         case 2:             image = (imageview) mlinearlayout.findviewbyid(r.id.third_pager_poster);             break;         default:             continue;            }          //the scrollview in mainfragment          customscrollview mparentscrollview = (customscrollview)getactivity().findviewbyid(r.id.index_scrollviewparent);          rect scrollbounds = new rect();         mparentscrollview.gethitrect(scrollbounds);         if (image.getlocalvisiblerect(scrollbounds)) {             // portion of imageview, single pixel, within visible window             imageloader.getinstance().displayimage(assets.get(i).getposter(), image);             system.out.println("im within");         else {             // none of imageview within visible window             system.out.println("im not within");         }     } } 

i need check if images visible , load them when are. system.out.println("im not within"); spammed in log. im sure there way of doing similar this, need help.

i've tried quick approach of doing of meat inside listview not optimal, @ least after reading, viewpager inside listview

update

same core issue before, using new approach horizontallistviews instad of pagers.

listviews seems way go. using arrayadapter populate regular vertical listview multiple hlistviews lazy loads images vertically each new row, , horizontally each image inside, intended.

problem: horizontal positions lost. horizontaladapter inherited recycled view onto next list item. positions new list item recycled list item was.

public view getview(int position, view convertview, viewgroup parent) {     final viewholder holder;     view view = convertview;      if (view == null) {         holder = new viewholder();         view = minflater.inflate(r.layout.carousel_frame_layout, null);         holder.carousellist = (hlistview) view.findviewbyid(r.id.hlistview);         view.settag(holder);     }     else {         holder = (viewholder) view.gettag();     }     carousel mcarousel = mdata.get(position);      // problem: re-uses adapters convertview     if (holder.carousellist.getadapter() == null) {         subcategorycarouseladapter horizontaladapter = new subcategorycarouseladapter(mcontext, mcarousel.getassets());         holder.carousellist.setadapter(horizontaladapter);     } else {         ((subcategorycarouseladapter) holder.carousellist.getadapter()).update(mcarousel.getassets());     }      return view; } 

the solution save inner horizontaladapter designated list item position, dont know how when hlistview recycled.

update 3

found working solution hlistviews. have still test if working viewpagers.

its lazy loading images both horizontally , vertically when using addheaderview on parent listview each inner hlistview. i´ve used horizontalvariablelistview universalimageloader carousels.

layoutinflater minflater = (layoutinflater) getactivity().getsystemservice             (context.layout_inflater_service);  (final carousel carousel : carousels) {     view carouselwrapper = minflater.inflate(r.layout.carousel_sub_category_layout, null);     listview.addheaderview(carouselwrapper);     listview.setadapter(null);      hlistview horizontallist = (hlistview) carouselwrapper.findviewbyid(r.id.hlistview);     subcategorycarouseladapter madapter = new subcategorycarouseladapter(getactivity(), carousel.getassets());     horizontallist.setadapter(madapter); } 

why not use listview instead of scrollview? has function of recycling views, loading start pagers visible on screen right now. otherwise should subclass scrollview in order check if pager visible right now


Comments

Popular posts from this blog

python - Subclassed QStyledItemDelegate ignores Stylesheet -

java - HttpClient 3.1 Connection pooling vs HttpClient 4.3.2 -

SQL: Divide the sum of values in one table with the count of rows in another -