android - FragmentStatePageAdapter doesn't remove child fragments -


having problem fragmentstatepageradapter , screen change orientation (saving state guess). layout of app following:

activity -->          fragment          fragment b (contains fragmentstatepageradapter) wich shows 2 fragments                    -->                      fragment b1                      fragment b2 

all fragments mentioned inherit basefragment class doesn't special keeping "global" vars need. when activity starts loads fragment a. menu replace fragment a fragment b. fragment b source following:

public class fragment b extends basefragment {      public static string tag = "b_fragment";     private mycustompageradapter adapter;     private arraylist<string> tags = new arraylist<>();     private viewpager mviewpager;      @override     public void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         adapter = new mycustompageradapter(getfragmentmanager());         //adapter = new mycustompageradapter(getchildfragmentmanager());         tags.add(fragmentb1.tag);         tags.add(fragmentb2.tag);     }      @override     public view oncreateview(layoutinflater inflater, viewgroup container,                          bundle savedinstancestate) {         return inflater.inflate(r.layout.fragment_sample, container, false);     }      @override     public void onviewcreated(view view, bundle savedinstancestate) {         super.onviewcreated(view, savedinstancestate);          mviewpager = (viewpager) view.findviewbyid(r.id.viewpager);         mviewpager.setadapter(adapter);         slidingtablayout mslidingtablayout = (slidingtablayout)view.findviewbyid(r.id.sliding_tabs);         mslidingtablayout.setviewpager(mviewpager);             }      class mycustompageradapter extends fragmentstatepageradapter {     //class mycustompageradapter extends fragmentpageradapter {          fragmentmanager mgr;         public sparsearray<fragment> registeredfragments = new sparsearray<fragment>();          public prepagatepageradapter(fragmentmanager mgr) {             super(mgr);             this.mgr = mgr;         }          @override         public int getcount() {             return 2;         }          @override         public fragment getitem(int position) {             switch (position) {                 case 0:                     return new fragmentb1();                 case 1:                     return new fragmentb2();             }             return null;         }          @override         public object instantiateitem(viewgroup container, int position)  {             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);         }     } } 

the problem happens when go fragment b go again fragment a , change orientation: see while debugging on onattach() method of fragment a in fragmentmanager fragment b no more present (replaced fragment a) fragment b1 , b2 there , called rispective onattach() methods, resulting in weird behaviours of layout. didn't child fragments should remove fragmentmanager?

at moment don't know if more details needed. can give further if need.


Comments

Popular posts from this blog

How has firefox/gecko HTML+CSS rendering changed in version 38? -

javascript - Complex json ng-repeat -

jquery - Cloning of rows and columns from the old table into the new with colSpan and rowSpan -