2014-09-13 2 views
7

Я новичок в разработке Andoid, и я создал фрагмент для замены фрагментов программно.Какова цель null в addToBackStack (null)?

Я следовал за guide on android developers.

У меня есть создать метод с именем 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) понять.

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

Но, я не понимаю, что показывает null. Я искал в Интернете, но я знал только, что это TAG, и мы могли бы использовать something like this.

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

(. Извините за мой плохой английский)

+0

@nem Я знаю, что такое null в java, но я хочу знать, почему null в addToBackStack()? какова цель null в «этом» методе? – xyz

ответ

14

От documentation, это довольно ясно:

public abstract FragmentTransaction addToBackStack (String name) 

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

Параметры

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

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

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

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

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

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

Я думаю, что вы не должны использовать .addToBackStack (NULL); , если вы пытаетесь использовать popst Backstack, возможно, что он может выбросить java.lang.IllegalStateException, поскольку он не будет иметь действительную ссылку на Popout последнего добавленного элемента. Это нужно проверить ... я не уверен на 100%.