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

В чем смысл addToBackStack с нулевым параметром?

У меня есть код клиента. Для всех фрагментов существует только одна активность, то есть одна операция управляет всеми фрагментами.

Эта операция содержит следующий код для любого фрагмента на конце метода этого фрагмента -

Например - фрагмент MoreFragment:

MoreFragment firstFragment = new MoreFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.article_fragment, firstFragment)
.addToBackStack(null).commit();

Итак,

1) В чем смысл addToBackStack(null), за которым следует commit()?

2) Почему вам нужно передать нулевой параметр в addToBackStack?

3) Как получить этот фрагмент после его добавления?

Кажется, что этот код бесполезен, поскольку я запускал код без последней строки .addToBackStack(null).commit(), и он запускался без каких-либо проблем.

4b9b3361

Ответ 1

В чем смысл addToBackStack (null), за которым следует commit()?

Котировка документов

Вызывая addToBackStack(), транзакция замены сохраняется в назад, чтобы пользователь мог отменить транзакцию и вернуть предыдущий фрагмент, нажав кнопку "Назад".

Если вы добавляете несколько изменений в транзакцию (например, еще один add() или remove()) и вызовите addToBackStack(), тогда все изменения были применены перед вызовом commit() добавляются в задний стек как один транзакции, а кнопка "Назад" полностью изменит их.

Порядок внесения изменений в FragmentTransaction не имеет значения, кроме:

Вы должны называть commit() last. Если вы добавляете несколько фрагментов в один и тот же контейнер, то порядок их добавления определяет порядок, который они отображаются в иерархии представлений.

Итак, вы зафиксировали последнее.

Почему вам нужно передать нулевой параметр в addToBackStack?

Он не обязательно должен быть null, это может быть строка. Если вы не хотите просто передать null

public abstract FragmentTransaction addToBackStack (String name)

Added in API level 11
Add this transaction to the back stack. This means that the transaction will be remembered after it is committed, and will reverse its operation when later popped off the stack.

Parameters
name    An optional name for this back stack state, or null.

Кажется, что этот код бесполезен, поскольку я запускал код без последнего line.addToBackStack(null).commit() и он бежал без проблем

Если вы хотите перейти к предыдущему фрагменту, добавьте его в backstack. Это зависит от того, хотите ли вы добавить фрагмент в стопку.

Как получить этот фрагмент после его добавления?

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

Дополнительная информация @

http://developer.android.com/guide/components/fragments.html

http://developer.android.com/reference/android/app/FragmentTransaction.html#addToBackStack(java.lang.String)

Ответ 2

Вы отвечаете, устарели. Если вы не хотите добавлять фрагменты в задний стек, вы должны использовать ниже фрагмент кода:

    public static void replaceFragment (@NonNull FragmentManager fragmentManager,
            @NonNull Fragment fragment,int frameId){

        checkNotNull(fragmentManager);
        checkNotNull(fragment);
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(frameId, fragment);
        transaction.disallowAddToBackStack(); // <-- This makes magic!
        transaction.commit();
    }

Ниже приведен пример симпатичный, как использовать его:

GameFragment fragment = GameFragment.newInstance(mGameObject, currentQuestion);
ActivityUtils.replaceFragment(getFragmentManager(), fragment, R.id.main);