Чтобы перемещаться между фрагментами в пределах 1 активности, я реализовал метод с именем fragmentSwicher
, который получает фрагмент и заменяет его активированным фрагментом в контейнере.Как обрабатывать стоп-кадр для замены одного и того же фрагмента различными данными
До сих пор так хорошо, но теперь проблема в том, что я хочу повторно использовать фрагмент с разными данными, но мой метод fragmentSwitcher
отказывается изменять фрагмент из-за существующего фрагмента в 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, is poped from backstack and there isnt any fragment in backstack like what we want to replace
if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null) {
ft.replace(R.id.main_container, frg, fragmentTag);
}
// with this method, we make sure that, no loading fragment come into frament backstack list, so, we are back safe.
if (!backStateName.equals("com.thetba.websitebuilder.fragments.ProgressFragments")) {
ft.addToBackStack(backStateName);
}
ft.commit();
}
И это метод, который обрабатывает backstack
в MainActivity:
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() == 1) {
finish();
// check if there is more than one fragment in backstack, show it
} else {
getFragmentManager().popBackStack();
}
}
Я пытался частично решить эту проблему таким образом: я поставил
ft.replace(R.id.main_container, frg, fragmentTag);
вне
if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null) {
ft.replace(R.id.main_container, frg, fragmentTag);
}
И fragmentSwitcher()
заменяет один и тот же фрагмент с различными данными, но когда пользователь нажимает на кнопку назад, он/она будет сталкиваться с этим фрагментом:
com.thetba.websitebuilder.fragments.ProgressFragments
, что не в backstack
.
Как было сказано, что нужно делать, чтобы обрабатывать backstack
при замене того же фрагмента?