android - How do I use get a ViewPager to let go of it's fragments when switching orientation? -


my application has layout differs based on orientation , device size. on larger devices composed of 2 views visible @ same time. on smaller devices layout viewpager lets user switch between 2 panes. typical pattern.

the problem viewpager appears stick around, , keeps fragments. however, same fragment instance not kept textrenderfragment. instead, appears class created anew every time. since fragments kept inside viewpager, end having 2 sets of content views. causes problems restoring state because 2 sets of views don't share bundle.

given such common pattern, expected find discussion how properly, have been unable. either have viewpager let go of fragments, or find way use same content fragment instances in both viewpager , static layout, depending on orientation.

the construction looks this:

@override public view oncreateview(final layoutinflater inflater,         final viewgroup container, final bundle saved_instance_state) {      if (saved_instance_state != null) {         current_book = saved_instance_state.getint("book");         current_chapter = saved_instance_state.getint("chapter");     }      // inflate layout fragment     final view v = inflater.inflate(r.layout.fragment_text_render,             container, false);      _configure_content_fragments(v);     return v; }  private void _configure_content_fragments(final view v) {     final viewpager vp = (viewpager) v.findviewbyid(r.id.tr_view_pager);     bl = new docloader();      boolean add_fragments = false;     final fragmentmanager mgr = getfragmentmanager();     primary_content_fragment = (primarycontent) mgr             .findfragmentbytag("primary_content_fragment");     secondary_content_fragment = (secondarycontent) mgr             .findfragmentbytag("secondary_content_fragment");      if (primary_content_fragment == null) {         primary_content_fragment = new primarycontent();         secondary_content_fragment = new secondarycontent();         primary_content_fragment.setnavlocation(current_book,                 current_chapter);         add_fragments = true;     }      if (add_fragments && vp == null) {         final android.support.v4.app.fragmenttransaction tx = getfragmentmanager()                 .begintransaction();         tx.add(r.id.tr_primary_content_container, primary_content_fragment,                 "primary_content_fragment");         tx.add(r.id.tr_secondary_content_container,                 secondary_content_fragment, "secondary_content_fragment");         tx.commit();     }  } 

the initialization of viewpager looks this:

@override public void onstart() {     super.onstart();     _configure_view_pager(getview()); }  private void _configure_view_pager(final view v) {     final viewpager vp = (viewpager) v.findviewbyid(r.id.tr_view_pager);      if (vp != null) {         final fragmentmanager mgr = getfragmentmanager();         final fragmentstatepageradapter adapter = new fragmentstatepageradapter(                 mgr) {              @override             public int getcount() {                 return 2;             }              @override             public fragment getitem(final int item) {                 switch (item) {                 case 0:                     return primary_content_fragment;                 case 1:                     return secondary_content_fragment;                 }                  return null;             }         };          vp.setadapter(adapter);     } } 

after spending time on problem, , receiving no answers here, appears there no easy way this. interrogate fragmentmanager parent , manually deal things way, have decided doing things whole thing wrong approach general problem.

we have changed our approach use drawerlayout. fixes of problems experiencing, , provides nice ui.


Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -