android - Fragment Management -
when managing tab-interface represented fragments, having issues managing them. when app first started, first / default fragment shown on display. however, when click on tab switch fragments, screen flashes before second fragment inflated , shown. after second fragment shown, can switch between 2 seamlessly. possible pre-inflate 2 fragments during startup of app? here code:
@override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); favoritesfragment = new favoritestab(); searchfragment = new nearbytab(); // database initialization db = new databasehandler(this); prev_stops = db.getallbusstop(); ab = getactionbar(); ab.setbackgrounddrawable(new colordrawable(color.dkgray)); ab.setstackedbackgrounddrawable(new colordrawable(color.gray)); ab.setnavigationmode(actionbar.navigation_mode_tabs); tab tab1 = ab.newtab().settext("favorites") .settablistener(new tablistener<favoritestab>( this, "tabone", favoritestab.class, favoritesfragment)); tab tab2 = ab.newtab().settext("nearby") .settablistener(new tablistener<nearbytab>( this, "tabtwo", nearbytab.class, searchfragment)); ab.addtab(tab1, 0, true); ab.addtab(tab2, 1, false); } public static class tablistener<t extends fragment> implements actionbar.tablistener { private fragment mfragment; private final activity mactivity; private final string mtag; private final bundle margs; private final class<t> mclass; public tablistener(activity activity, string tag, class<t> clz, fragment fragment) { this(activity, tag, clz, null, fragment); } public tablistener(activity activity, string tag, class<t> clz, bundle args, fragment fragment) { mactivity = activity; mtag = tag; mclass = clz; margs = args; mfragment = fragment; // check see if have fragment tab, // saved state. if so, deactivate it, because our // initial state tab isn't shown. //mfragment = mactivity.getfragmentmanager().findfragmentbytag(mtag); if (mfragment != null /*&& !mfragment.isdetached()*/) { system.out.println("in tablistener constructor now"); fragmenttransaction ft = mactivity.getfragmentmanager().begintransaction(); ft.remove(mfragment); ft.commit(); } } /* following each of actionbar.tablistener callbacks */ public void ontabselected(tab tab, fragmenttransaction ft) { // check if fragment initialized if(mfragment.ishidden()) { system.out.println("initial loop"); ft.show(mfragment); } else { system.out.println("non-initial loop"); ft.add(r.id.fragment_container, mfragment); } } public void ontabunselected(tab tab, fragmenttransaction ft) { if (mfragment != null) { // detach fragment, because 1 being attached ft.hide(mfragment); //ft.remove(mfragment); curr_tab = tab.getposition(); if(curr_tab == 1) { item3.seticon(r.drawable.refresh); } else { item3.seticon(r.drawable.location_found); } } } public void ontabreselected(tab tab, fragmenttransaction ft) { // user selected selected tab. nothing. } } on side note, possible give setup swipe / sliding animation similar of viewpager when switching tabs?
Comments
Post a Comment