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