android - Don't understand viewpager life cycle with fragment -


i'm little bit dissapointed viewpager fragments, since 4 days try many solutions, without sucess.

i 'm beginner in fragments, follow great tutorial create viewpager. can rotate phone no problem fragments. must open new activity fragment within viewpager , go on host activity contain viewpager. in point can't fragment host activity when go fron activity b. don't understand can ?

exemple :

tabsessionactivity --> fragment --> activity b --> tabsessionactivity(fragment =null)

tabsessionactivity --> fragment -->rotate phone --> tabsessionactivity(fragment ok!)

here adapter :

public class mypageradapter extends fragmentpageradapter {      private final list<fragment> fragments;     private fragmentmanager mfragmentmanager;       // on fournit à l'adapter la liste des fragments à afficher     public mypageradapter(fragmentmanager fm, list<fragment> fragments) {         super(fm);         mfragmentmanager=fm;          this.fragments = fragments;     }      @override     public fragment getitem(int position) {         for(fragment mfragment:fragments){             log.i("fragment tag , id"," fragmenttag:"+mfragment.gettag()+" fragmentid:"+mfragment.getid()+"nb fragments:"+this.fragments.size());          }         return this.fragments.get(position);      }      @override     public int getcount() {         return this.fragments.size();     }          public fragment getactivefragment(viewpager container, int position) {         string name = makefragmentname(container.getid(), position);         for(fragment mfragment:mfragmentmanager.getfragments()){             log.i("fragment tag , id"," fragmenttag:"+mfragment.gettag()+" fragmentid:"+mfragment.getid()+" nb fragments:"+this.mfragmentmanager.getfragments().size());         }         return  mfragmentmanager.findfragmentbytag(name);          }          private static string makefragmentname(int viewid, int index) {             return "android:switcher:" + viewid + ":" + index;         } } 

then host activity :

public class tabssessionactivity extends sherlockfragmentactivity {     private geolocatingservice mgeoservice;     private mypageradapter mpageradapter;       private  viewpager mviewpager; //  private myfragmentpageradapter mmyfragmentpageradapter;     private dashboard_fragment fragment1;     private osmmapfragment fragment2;     private fragment1 fragment3;      final igeolocatingservicelistener servicelistener = new igeolocatingservicelistener() {         @override         public void datachanged(final object data) {             runonuithread(new runnable() {                 @override                 public void run() {                     log.i("tabsessionactivity:geoservice","service rafraichi");                     refreshcurrentfragment();                  }             });         }     };      /************************** service connection **********************/     serviceconnection connection = new serviceconnection() {         @override         public void onservicedisconnected(componentname name) {             log.i("geoservice", "tabssessionactivity:disconnected!");             mgeoservice = null;         }          @override         public void onserviceconnected(componentname name, ibinder service) {             // todo auto-generated method stub             log.i("tabsessionactivity:geoservice", "tabssessionactivity:connected!");             mgeoservice = ((geolocatingservice.localbinder) service).getservice();             mgeoservice.addlistener(servicelistener);             log.i("tabsessionactivity:geoservice","service connecté");             refreshcurrentfragment();              }     };      public geolocatingservice getgeolocatingservice() {         return mgeoservice;     }         @suppresswarnings("unchecked")     @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         // set view main_fragment.xml         setcontentview(r.layout.activity_tabs_session);          // création de la liste de fragments que fera défiler le pageradapter         list fragments = new vector();          // ajout des fragments dans la liste         fragments.add(fragment.instantiate(this,osmmapfragment.class.getname()));         fragments.add(fragment.instantiate(this,dashboard_fragment.class.getname()));         fragments.add(fragment.instantiate(this,fragment1.class.getname()));          // création de l'adapter qui s'occupera de l'affichage de la liste de         // fragments         this.mpageradapter = new mypageradapter(super.getsupportfragmentmanager(),fragments);            // affectation de l'adapter au viewpager         mviewpager = (viewpager) findviewbyid(r.id.pager);         mviewpager.setadapter(this.mpageradapter);        //bind title indicator adapter         linepageindicator lineindicator = (linepageindicator)findviewbyid(r.id.indicator);         lineindicator.setviewpager(mviewpager);           //style line indicator         final float density = getresources().getdisplaymetrics().density;         lineindicator.setselectedcolor(0xff45a5d7);         lineindicator.setunselectedcolor(0xff888888);         lineindicator.setstrokewidth(4 * density);         lineindicator.setlinewidth(30 * density);          mviewpager.setcurrentitem(1);         log.i("tabsessionactivity:geoservice","on create");       }      public void refreshcurrentfragment(){         //retrieve fragments instances           fragment1 = (dashboard_fragment) this.mpageradapter.getactivefragment(mviewpager, 1);         fragment2 = (osmmapfragment) this.mpageradapter.getactivefragment(mviewpager, 0);         fragment3 = (fragment1)this.mpageradapter.getactivefragment(mviewpager, 2);          //check if fragment active , visible         if (fragment1!=null){             log.i("tabsessionactivity:geoservice","fragment trouvé");             fragment1.ondatachangedcallback();         }         if (fragment2!=null){             fragment2.ondatachangedcallback();         }         if (fragment3!=null){             fragment3.ondatachangedcallback();         }      }        @override     public void onstart() {         super.onstart();         //on attache la vue au service         bindservice(                 new intent(this, geolocatingservice.class),                 connection, bind_auto_create);         log.i("tabsessionactivity:geoservice","on start bind");     }        @override     public void onresume() {         super.onresume();             if(mgeoservice!=null){                 log.i("tabsessionactivity:geoservice","refreshcurrentfragment()");             }      }      @override     public void onpause() {         super.onpause();             if(mgeoservice!=null){                 unbindservice(connection);                 mgeoservice.removelistener(servicelistener);                 mgeoservice=null;                 log.i("tabsessionactivity:geoservice","on pause unbind");             }       }      @override     public void ondestroy() {          if(mgeoservice!=null){                 unbindservice(connection);                 log.i("tabsessionactivity:geoservice","on destroy unbind");             }         /*if(servicetools.isgeolocatingservicerunning(this)){             stopservice(new intent(this, geolocatingservice.class));         }*/          super.ondestroy();     }        @override     public boolean onkeydown(int keycode, keyevent event) {         if (keycode == keyevent.keycode_back) {             if(mgeoservice!=null){                 if(mgeoservice.getrecord()){                 showcancelrecordalerttouser();                 }else{                     startactivity(new intent(this, mainactivity.class));                     finish();                 }              }else{                 startactivity(new intent(this, mainactivity.class));                 finish();             }          }         return super.onkeydown(keycode, event);     } 

log cat says null fragments when go on host activity activity b :

fragment1 = (dashboard_fragment) this.mpageradapter.getactivefragment(mviewpager, 1);             fragment2 = (osmmapfragment) this.mpageradapter.getactivefragment(mviewpager, 0);             fragment3 = (fragment1)this.mpageradapter.getactivefragment(mviewpager, 2); 

try this:

onuserinteraction(){     super.onuserinteraction();     switch (mviewpager.getcurrentitem()) {     case 3:         fragment currentfragment = this.getsupportfragmentmanager()                 `.findfragmentbytag(getfragmenttag(mviewpager.getcurrentitem()));         break;    }  private string getfragmenttag(int pos) {     return "android:switcher:" + r.id.viewpager + ":" + pos; } 

log currentfragment value , check whether null. worked me.


Comments

Popular posts from this blog

java.util.scanner - How to read and add only numbers to array from a text file -

rewrite - Trouble with Wordpress multiple custom querystrings -