android - Save fragment state inside a Tab -


i made actionbar 2 tabs - 1 afragment , bfragment. afragment contains button. clicking button on afragment result change cfragment. however, clicking tab again results afragment being loaded again. can prevent this, tab, "when clicks on you, load last fragment state (in case, cfragment)?"

this mainactivity.java:

public class mainactivity extends activity {  public static context appcontext;  /** called when activity first created. */ @override public void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);      appcontext = getapplicationcontext();      //actionbar      actionbar actionbar = getactionbar();      actionbar.setnavigationmode(actionbar.navigation_mode_tabs);       actionbar.tab playertab = actionbar.newtab().settext("fragment a");      actionbar.tab stationstab = actionbar.newtab().settext("fragment b");       fragment playerfragment = new afragment();      fragment stationsfragment = new bfragment();       playertab.settablistener(new mytabslistener(playerfragment));      stationstab.settablistener(new mytabslistener(stationsfragment));       actionbar.addtab(playertab);      actionbar.addtab(stationstab); } 

my tablistener:

class mytabslistener implements actionbar.tablistener { public fragment fragment;  public mytabslistener(fragment fragment) {     this.fragment = fragment; }  @override public void ontabreselected(tab tab, fragmenttransaction ft) {     toast.maketext(mainactivity.appcontext, "reselected!", toast.length_long).show(); }  @override public void ontabselected(tab tab, fragmenttransaction ft) {     ft.replace(r.id.fragment_container, fragment); }  @override public void ontabunselected(tab tab, fragmenttransaction ft) {     ft.remove(fragment); } } 

and finally, afragment.java:

public class afragment extends fragment {  @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) {     // inflate layout fragment     view view = inflater.inflate(r.layout.afragment, container, false);     button mbutton = (button) view.findviewbyid(r.id.button1);     mbutton.setonclicklistener(new view.onclicklistener() {         public void onclick(view v) {             fragmentmanager fragmentmanager = getfragmentmanager();             fragmenttransaction fragmenttransaction = fragmentmanager.begintransaction();             cfragment fragment = new cfragment();             fragmenttransaction.replace(r.id.fragment_container, fragment);             fragmenttransaction.commit();         }     });     return view; } } 

how save cfragment tab in such way clicking first tab not result afragment loading again? thank you.

the state not being saved because adding new fragment every time change tabs.

in 'ontabunselected`, don't remove, detach/hide

public void ontabunselected(tab tab, fragmenttransaction ft) {   if (fragment != null) {     ft.detach(fragment);    } } 

and in ontabselected, check see if fragment exists instead of replacing

public void ontabselected(tab tab, fragmenttransaction ft) {   fragment = mactivity.getsupportfragmentmanager().findfragmentbytag(tag);   if( fragment == null ) {     fragment = fragment.instantiate(mactivity, mclass.getname());     ft.add(r.id.fragment_container, fragment, tag);   } else {     ft.attach(fragment);   } } 

Comments

Popular posts from this blog

SPSS keyboard combination alters encoding -

Add new record to the table by click on the button in Microsoft Access -

javascript - jQuery .height() return 0 when visible but non-0 when hidden -