2014-05-04 1 views
0

Что произойдет, если добавить к BackStack фрагмент, который уже находится внутри него? Например:добавить фрагмент в backstack, который уже внутри него

Fragment one = new Fragment(); 
Fragment two = new Fragment(); 

getSupportFragmentManager().beginTransaction().add(R.id.viewGroup, one).addToBackStack(null).commit(); 
//... 
getSupportFragmentManager().beginTransaction().replace(R.id.viewGroup, two).addToBackStack(null).commit(); 
//... 
getSupportFragmentManager().beginTransaction().replace(R.id.viewGroup, one).addToBackStack(null).commit(); 

Когда я добавить еще раз фрагмент «один», две ссылки на него внутри стека или только Lastest поддерживаетс?

ответ

1

Даже через instance of the fragment это то же самое, BackStack запись будет увеличена, когда уже существует Fragment добавляется BackStack снова.

Когда вы добавляете First Fragment, запись заднего стека будет one.

При замене Second Fragment, задняя запись стека будет two

При замене First Fragment (даже несмотря на то же First Fragment instance), The older (first) Fragment instance будет reused. но BackStack entry will be three

Теперь стек будет выглядеть следующим образом

`First Fragment` -> `Second Fragment` -> `First Fragment` 

Итак, когда Back pressedFragments будет выскочила, как Fist Fragment , then Second Fragment and then again First Fragment.

Это addBackStackState метод FragmentManager

void addBackStackState(BackStackRecord state) { 
    if (mBackStack == null) { 
     mBackStack = new ArrayList<BackStackRecord>(); 
    } 
    mBackStack.add(state); 
    reportBackStackChanged(); 
} 

Вы можете посмотреть на BackStackRecord класс, чтобы понять больше, как называется addBackStackState метод.