Привет, как очистить фрагмент назад, я использую ниже логику, он не работает...
for(int i = 0; i < mFragmentManager.getBackStackEntryCount(); ++i) {
mFragmentManager.popBackStack();
}
помогите мне..
Привет, как очистить фрагмент назад, я использую ниже логику, он не работает...
for(int i = 0; i < mFragmentManager.getBackStackEntryCount(); ++i) {
mFragmentManager.popBackStack();
}
помогите мне..
Попробуйте это
mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
Ответ выше почти правильный, но вам нужен защитник вокруг списка фрагментов, поскольку он может быть пустым:
private void clearBackStack() {
FragmentManager manager = getSupportFragmentManager();
if (manager.getBackStackEntryCount() > 0) {
FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
while (getSupportFragmentManager().getBackStackEntryCount() > 0){
getSupportFragmentManager().popBackStackImmediate();
}
один способ - пометить backstack
и, если вы хотите его очистить
mFragmentManager.popBackStack("myfancyname", FragmentManager.POP_BACK_STACK_INCLUSIVE);
где "myfancyname"
должен соответствовать строке, которую вы использовали с addToBackStack
. Например.
Fragment fancyFragment = new FancyFragment();
fragmentTransaction.replace(R.id.content_container, fancyFragment, "myfragmentag");
fragmentTransaction.addToBackStack("myfancyname");
имя backstack
и имя тега фрагмента могут быть одинаковыми, но в этом отношении ограничений нет
Из документации
Если установлено, и указано имя или идентификатор записи заднего стека, то все соответствующие записи будут потребляться до тех пор, пока найдено совпадение или достигается дно стека. В противном случае все записи до, но не включая эту запись, будут удалены.
если вы не хотите использовать имя для своей backstack, вы можете передать первый параметр
mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
Это немного поздно, но у меня была сама проблема. Вы можете сделать:
FragmentManager manager = getFragmentManager();
FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
Довольно объяснительно; вы просто получаете первую запись, получаете свой идентификатор, а затем всплываете все до и включая запись с этим идентификатором.
Лучший вариант, который я когда-либо видел, здесь.
int count = getSupportFragmentManager().getBackStackEntryCount();
if (count > 0) {
getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}