Если вам нужно перезагружать данные в этом фрагменте каждый раз, когда вы их загружаете, то это правильный путь.
Но если вам нужно установить данные только за один раз, вам нужно выполнить транзакцию фрагмента с тегом, и при загрузке фрагмента проверьте этот тег, чтобы проверить, существует ли он уже в представлении контейнера или нет.
заменить фрагмент следующим образом:
MyFragment fragment = new MyFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.place_holder,fragment,"myFragmentTag");
fragmentTransaction.commit();
Оберните вышеуказанный код в эту if
скобку.
fragment = (MyFragment) getSupportFragmentManager().findFragmentByTag("myFragmentTag");
if(fragment == null){
// ok, fragment is not already exists, so load it once.
} else {
// Pop fragments to this tag
fm = getSupportFragmentManager();
for (int i = 0; i < getSupportFragmentManager().getBackStackEntryCount()-1; i--) {
if (!fm.getBackStackEntryAt(i).getName().equalsIgnoreCase(newFragTag)){
fm.popBackStack();
} else {
break;
}
}
}
итоговый код выглядит так:
FragmentManager fragmentManager = getSupportFragmentManager();
fragment = (MyFragment) fragmentManager.findFragmentByTag("myFragmentTag");
if(fragment == null){
// ok, fragment is not already exists, so load it once.
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.place_holder,fragment,"myFragmentTag");
fragmentTransaction.commit();
} else {
// Pop fragments to this tag
for (int i = 0; i < fragmentManager.getBackStackEntryCount()-1; i--) {
if (!fragmentManager.getBackStackEntryAt(i).getName().equalsIgnoreCase("myFragmentTag")){
fragmentManager.popBackStack();
} else {
break;
}
}
}