2014-01-21 4 views
3

Я знаю, что могу создать фрагмент и добавить его через тег или идентификатор. Возможно ли использовать один из них? Есть ли какая-то причина, почему я должен использовать один над другим?Разница между доступом к фрагментам тегом или идентификатором

model = new ModelFragment(); 

//tag 
getSupportFragmentManager().beginTransaction().add(model, "tag").commit(); 
//id 
getSupportFragmentManager().beginTransaction().add(4, model).commit(); 

ответ

1

Я считаю, что вы можете только добавить id к Fragment, если это статический Fragment (то есть с помощью XML). Если вы хотите динамически добавить Fragments через FragmentTransaction, третий параметр add() - это String для тега. Предоставление тега является необязательным, но рекомендуется, чтобы позже вы могли удержать Fragment.

В показанном вами id случае первый параметр add() - это идентификатор макета контейнера, который вы хотите добавить Fragment, а не идентификатор для Fragment.

3

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

Чтобы динамически добавить использование фрагмента теги:

android.app.FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.fragment_container, fragment, TAG); 
    ft.commit(); 

Чтобы получить фрагмент где-то в коде, используйте что-то вроде:

if(getFragmentManager().findFragmentByTag(TAG)!=null){ 
     ft.remove(getFragmentManager().findFragmentByTag(TAG)); 
     ft.commit(); 
} 
+1

Не могли бы вы предоставить ссылку на Android-документацию, где они заявляют об этом? –

1

идентификаторы используются для идентификации контейнера этот фрагмент будет помещен в. Taken from documentation: containerViewId Необязательный идентификатор контейнера, в который должен быть помещен этот фрагмент. Если 0, он не будет помещен в контейнер.
Используя этот идентификатор, вы можете получить фрагмент позже с помощью findFragmentById - см. Ниже.

Тэги - это метка, используемая менеджером фрагментов для последующего выявления и извлечения фрагмента. Используя тег, фрагмент можно определить независимо от того, какой контейнер содержит этот фрагмент.

Идентификаторы и теги могут использоваться одновременно или отдельно. FragmentManager может идентифицировать фрагмент на both id и tag.

Смежные вопросы