Krupal5 Ответов: 2

Какова цель null в addToBackStack(null)?


Я новичок в разработке Andoid и создал фрагмент для замены фрагментов программно.

Я следовал руководству по разработчикам android.

Я создал метод с именем `selectFrag` и запустил его при нажатии кнопки:

public void selectFrag(View view)

    {

 Fragment fr;

         if(view == findViewById(R.id.showsecond)) {
             fr = new secondfragment();

         }else {
             fr = new firstfragment();
         }

        FragmentManager fm = getFragmentManager();

        FragmentTransaction ft = fm.beginTransaction();

        ft.replace(R.id.fragment_place,fr);

        ft.addToBackStack(null);

        ft.commit();
    }


Код работает отлично, и я понимаю все, кроме " addToBackStack(null)".

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

Но я не понимаю, что здесь показывает "нуль".

Итак, мой вопрос очень прост :Что здесь подразумевается под нулем? или что делает нуль?

2 Ответов

Рейтинг:
4

Krupal5

Я нашел ответ на stackoverflow:

Из документации это довольно ясно:

public abstract FragmentTransaction addToBackStack (String name)


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

Параметры:

имя: необязательное имя для этого состояния заднего стека или null.


Таким образом, ваш параметр является необязательным, а представляет собой имя фрагмента.

Если вы просто хотите добавить эту транзакцию в задний стек и вам не нужно обращаться к ней позже, то вы можете поставить "null" в качестве имени.

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

Имя используется для идентификации этого конкретного фрагмента. Это может быть полезно, например, если вы хотите получить этот фрагмент из `FragmentManager`:

addToBackStack (FRAGMENT_NAME);
getFragmentMangager().findFragmentByTag(FRAGMENT_NAME);


Рейтинг:
1

Member 13749922

Этот тег используется в Добавить/заменить(идентификатор фрагмента, тег) используется для извлечения фрагмента по телефону fragmentManager.findFragmentByTag(тег).

Однако "имя", используемое в addToBackStatck(name), используется для управления тем, к какому фрагменту вы хотите добавить обратный стек фрагментов, вызывая popBackStatck/Immediate(name, flags). Итак, если у меня есть стек фрагментов с именованными фрагментами: A, B, C и D С A внизу. Когда вы вызываете popBackStack(B, XXX_EXCLUSIVE), то ваш обратный стек фрагментов будет выглядеть следующим образом: A и B после вызова. Без имени ты не сможешь этого сделать.