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
Post a Comment