android - ViewPager Fragments are not initiated in onCreate -


i seem having issue updating fragments using in viewpager, regardless of whether try in oncreate(), oncreateview(), or onresume(). here how i'm setting viewpager in mainfragment:

public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) {        view rootview = inflater.inflate(r.layout.fragment_main_screen, container, false);          mpager = (viewpager)rootview.findviewbyid(r.id.pager);         mpager.setoffscreenpagelimit(2); // 3 pages loaded @ once.         madapter = new journalpageradapter(getactivity().getsupportfragmentmanager(), this);         mpager.setadapter(madapter);          // add bar graph view         mgraphlayout = (linearlayout) rootview.findviewbyid(r.id.journalgraph);         updategraph();         mgraphlayout.addview(mgraphview);          mpainfrag = (painfragment)madapter.getregisteredfragment(0);         // null pointer here, if put action in button listener, works.         mpainfrag.setscale(mentry.getpain()); ... 

i'm accessing fragments through overridden methods in fragmentpageradapter:

public class journalpageradapter extends fragmentpageradapter {      sparsearray<fragment> registeredfragments = new sparsearray<fragment>();     private view.onclicklistener monclicklistener;       public journalpageradapter(fragmentmanager mgr, view.onclicklistener onclicklistener) {         super(mgr);         monclicklistener = onclicklistener;     }     @override     public fragment getitem(int pos) {         switch(pos) {              case 0: return painfragment.newinstance("painfragment", monclicklistener);             case 1: return stressfragment.newinstance("stressfragment", monclicklistener);             case 2: return sleepfragment.newinstance("sleepfragment", monclicklistener);             default: return painfragment.newinstance("painfragment", monclicklistener);         }     }      @override     public int getcount() {         return 3;     }      /* streets of boston (http://stackoverflow.com/questions/8785221/retrieve-a-fragment-from-a-viewpager)     */      @override     public object instantiateitem(viewgroup container, int position) {         log.v("rx", "iteminstantiated");         fragment fragment = (fragment) super.instantiateitem(container, position);         registeredfragments.put(position, fragment);         return fragment;     }      @override     public void destroyitem(viewgroup container, int position, object object) {         registeredfragments.remove(position);         super.destroyitem(container, position, object);     }      public fragment getregisteredfragment(int position) {         return registeredfragments.get(position);     } 

i can't seem figure out why fragment null right after set adapter, if put fragment update code in click event, have no issues.

i try adding layout listener viewpager notified when laying out of views has occurred.

when create viewpager call mpager.getviewtreeobserver().addongloballayoutlistener() , pass implementing ongloballayoutlistener.

in callback method, fragment updating. make sure call mpager.getviewtreeobserver().removeglobalonlayoutlistener(this) in callback, otherwise callback called multiple times.


Comments

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -