android - Interaction between fragments slow refresh -
on screen have 2 containers - left 3 fragments in view pager, right single fragment. on right increment temp variable , through inteface pass variable fragments. switch fragments in view pager , seems act right. but, there 2 problems.
first when start app , try actualize temp variable in third fragment in view pager there npe. , of course should be, because @ point third fragment not initialized (view pager initialize actual fragment , ones on sides, able slide between fragments). how can initialize third fragment @ begining? thought can store data temporarily in second fragment , when second initialized can pass data third, seems not solution.
second question when initialize fragments sliding on , come first fragment view of third gone (but it's initialized). when actualize temp variable , slide third fragment can see variable after +- 1 second. can explain me why? without knowledge can't solve problem :/
here have code of mine:
public class thirdfragment extends fragment { view thisview; textview temptextview; string iterator; public achievfragment() { } @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); iterator = "start"; } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { thisview = inflater.inflate(r.layout.fragment_third, container, false); temptextview= (textview) thisview.findviewbyid(r.id.temptextview); temptextview.settext(iterator); return thisview; } public void getvariable(string text) { iterator = text; temptextview.settext(iterator); }
so it's third fragment class. @ beginning initialize iterator (it's temp variable) global variable avoid npe after initializing fragments. , in oncreateview set view of textview value of variable. should work fine, +-1 sec offset makes me sad.
i think sample of code should enough, rest standard suppose, if interested i'll past rest.
i hope understand wrote.
here main (hosting) activity code:
public class mainactivity extends appcompatactivity implements onfragmentinteractionlistener { viewpager mviewpager; fragmentpageadapter ft; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); mviewpager = (viewpager) findviewbyid(r.id.pager_container); ft = new fragmentpageadapter(getsupportfragmentmanager()); mviewpager.setadapter(ft); fragmentmanager fm = getfragmentmanager(); fragmenttransaction ft = fm.begintransaction(); rightfragment gamefragment = new rightfragment(); ft.replace(r.id.rightfragment_container, rightfragment,"rightfragment"); ft.commit(); } @override public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.menu_main, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { return super.onoptionsitemselected(item); } @override public void onupdatefirst(string text) { firstfragment firstfragment = (firstfragment) ft.instantiateitem(mviewpager,0); firstfragment.getvariable(text); } @override public void onupdatesecond(string text) { secondfragment secondfragment = (secondfragment) ft.instantiateitem(mviewpager,1); secondfragment.getvariable(text); } @override public void onupdatethird(string text) { thirdfragment thirdfragment = (thirdfragment) ft.instantiateitem(mviewpager,2); thirdfragment.getvariable(text); }
}
fragment page adapter code:
public class fragmentpageadapter extends fragmentpageradapter { public fragmentpageadapter(fragmentmanager fm) { super(fm); } @override public fragment getitem(int arg0) { switch (arg0) { case 0: return new firstfragment(); case 1: return new secondfragment(); case 2: return new thirdfragment(); default: break; } return null; } @override public int getcount() { return 3; }
expection when try actualize variable on third fragment before initialize (in example right after start app)
06-14 16:47:25.621 27246-27246/com.package.app e/androidruntime﹕ fatal exception: main java.lang.nullpointerexception @ com.package.app.thirdfragment.getvariable(thirdfragment.java:37) @ com.package.app.mainactivity.onupdatethird(mainactivity.java:59) @ com.package.app.rightfragment$3.onclick(rightfragment.java:57) @ android.view.view.performclick(view.java:4101) @ android.view.view$performclick.run(view.java:17082) @ android.os.handler.handlecallback(handler.java:615) @ android.os.handler.dispatchmessage(handler.java:92) @ android.os.looper.loop(looper.java:137) @ android.app.activitythread.main(activitythread.java:4940) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:511) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:798) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:565) @ dalvik.system.nativestart.main(native method)
as first question can call setoffscreenpagelimit(2)
method on viewpager right after initializing it. default set 1 means adapter creates 1 page on screen right , 1 next.
Comments
Post a Comment