android - How to handle backstack for replacing the same fragment with different data -


in order navigate between fragments within 1 activity, implemented method called fragmentswicher, gets fragment , replaces activated fragment in container.

so far good, problem want re-use fragment different data, fragmentswitcher method refuses change fragment because of existing fragment in backstack.

public void fragmentswitcher(fragment frg) {      string backstatename = frg.getclass().getname();     string fragmenttag = backstatename;      fragmentmanager manager = getfragmentmanager();      boolean fragmentpopped = manager.popbackstackimmediate(backstatename, 0);      fragmenttransaction ft = manager.begintransaction();      // check if fragment, poped backstack , there isnt fragment in backstack want replace     if (!fragmentpopped && manager.findfragmentbytag(fragmenttag) == null) {         ft.replace(r.id.main_container, frg, fragmenttag);     }      // method, make sure that, no loading fragment come frament backstack list, so, safe.     if (!backstatename.equals("com.thetba.websitebuilder.fragments.progressfragments")) {         ft.addtobackstack(backstatename);     }      ft.commit();  } 

and method handles backstack in mainactivity:

@override public void onbackpressed() {      if (getfragmentmanager().getbackstackentrycount() == 1) {         finish();     // check if there more 1 fragment in backstack, show     } else {         getfragmentmanager().popbackstack();     } } 

i tried partially solve issue way: put

ft.replace(r.id.main_container, frg, fragmenttag); 

outside of

    if (!fragmentpopped && manager.findfragmentbytag(fragmenttag) == null) {         ft.replace(r.id.main_container, frg, fragmenttag);     } 

and fragmentswitcher() replaces same fragment different data, when user presses button, s/he face fragment:

com.thetba.websitebuilder.fragments.progressfragments 

that not in backstack.

that said, should handle backstack when replacing same fragment?

this problem because of replacing same fragment class, although can repopulate fragment data, but, handling backstack in solution complicated.

so, purpose can introduce new fragment new name replacement. this, can add random things @ end of backstackname string.

example:

if (backstatename.contains("com.thetba.websitebuilder.fragments.pagesfragment")) {        backstatename += string.valueof(getrandomint(10, 500)); } 

Comments