Подтвердить что ты не робот

Как очистить Фрагмент backstack в android

Привет, как очистить фрагмент назад, я использую ниже логику, он не работает...

for(int i = 0; i < mFragmentManager.getBackStackEntryCount(); ++i) {            
     mFragmentManager.popBackStack();
}

помогите мне..

4b9b3361

Ответ 1

Попробуйте это

mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

Ответ 2

Ответ выше почти правильный, но вам нужен защитник вокруг списка фрагментов, поскольку он может быть пустым:

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);
    }
}

Ответ 3

while (getSupportFragmentManager().getBackStackEntryCount() > 0){
    getSupportFragmentManager().popBackStackImmediate();
}

Ответ 4

один способ - пометить 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);

Ответ 5

Это немного поздно, но у меня была сама проблема. Вы можете сделать:

FragmentManager manager = getFragmentManager();
FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);

Довольно объяснительно; вы просто получаете первую запись, получаете свой идентификатор, а затем всплываете все до и включая запись с этим идентификатором.

Ответ 6

Лучший вариант, который я когда-либо видел, здесь.

            int count = getSupportFragmentManager().getBackStackEntryCount();
            if (count > 0) {
                getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
            }