android - ViewPager fragments recreation, are resumed but not visible -


i have issue viewpager + fragmentpageadapter.

scenario: have 1 activity inside fragment a. fragment has viewpager fragment b1 e fragment b2. b1 e b2 same class, different data argument.

problem: works @ creation time. when app goes in background , process killed android, trying restore last state, putting app again, fragment b1 e b2 aren't visible in foreground, while fragment is. seems bit strange fragment b1 e b2 int fragment a's childfragmentmanager , resumed because onstart() , onresume() called (seen log). pager resumed 2 pages, empty or better nothing visible.

if understand how fragmentpageradapter works, should responsibility manage own fragments , how should recreated. enforce point, fragmentpageradapter doesn't call getitem(int position) when come background if exist fragment in position specified tag.

...so why can't see fragment b1 e b2, pager empty?

this sample code.

fragmenta

@override     public void onstart() {         super.onstart();         populateviewpager();     }      private void populateviewpager() {         pager.setadapter(new myfragmentpageadapter(getchildfragmentmanager()));         indicator.setviewpager(pager);         indicator.notifydatasetchanged();     } 

fragmentpageradapter

public class myfragmentpageadapter extends fragmentpageradapter {       public myfragmentpageadapter(fragmentmanager fm) {         super(fm);     }      @override     public fragment getitem(int position) {         return fragmentb.newinstance(position);     }      @override     public int getcount() {         return 2;      }      @override     public charsequence getpagetitle(int position) {         string title = "";         if (position == 0)             title = "fragment b1";         else if (position == 1)             title = "fragment b2";          return title;     } } 

fragment b

        public static fragmentb newinstance(int position) {                 fragmentb f = new fragmentb();                 bundle b = new bundle();                 b.putint(position_in_pager_argument, position);                 f.setarguments(b);                 return f;             }              @override             public void oncreate(bundle savedinstancestate) {                 super.oncreate(savedinstancestate);                 log.d(tag, "oncreate");             }              @override             public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) {                 super.oncreateview(inflater, container, savedinstancestate);                 log.d(tag, "oncreateview");                 view root = inflater.inflate(r.layout.fragment_b_layout, container, false);                  empty = (textview) root.findviewbyid(r.id.empty);                 list = (listview) root.findviewbyid(r.id.list);                  return root;             }              @override             public void onstart() {                 super.onstart();                 log.d(tag, "onstart");                 populatelistview(loaddata());              }              @override             public void onstop() {                 super.onstop();             }     } 

use fragmentstatepageradapter instead of fragmentpageradapter. worked me. there memory issues (only while screen orientation change) if viewpager has lots of views display.


Comments

Popular posts from this blog

php - mySql Join with 4 tables -

css - Text drops down with smaller window -

c# - DetailsView in ASP.Net - How to add another column on the side/add a control in each row? -