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

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -