Использование тегов фрагментов

В Android вы можете установить тег для фрагмента в FragmentTransaction.

Зачем мне нужно устанавливать тег для фрагмента?

И хорошая практика, если Фрагмент изменил свое поведение на основе его тега?

Solutions Collecting From Web of "Использование тегов фрагментов"

Его можно использовать для того, чтобы избежать повторного создания изменения Fragment по Activity .

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.photos_image_pager); MyFragment fragment; if (savedInstanceState != null) { fragment = (MyFragment) getFragmentManager() .findFragmentByTag("my_fragment_tag"); } else { fragment = new MyFragment(); fragment.setArguments(getIntent().getExtras()); getFragmentManager() .beginTransaction() .add(android.R.id.content, fragment, "my_fragment_tag") .commit(); } } 

Действие будет восстановлено с изменением ориентации, и будет onCreate(...) метод onCreate(...) . Если Fragment был создан до того, как действие было уничтожено и было добавлено в FragmentManager с помощью тега, теперь он может быть извлечен из FragmentManager одним и тем же тегом.

Для более подробного обсуждения того, как его можно использовать, см.

  • ViewPager и фрагменты – какой способ сохранить состояние фрагмента?

Для фрагментов без интерфейса:

Зачем мне нужно устанавливать тег для фрагмента?

Иногда Fragment может использоваться в качестве фонового работника. Такой фрагмент не имеет пользовательского интерфейса, его также называют фрагментом, отличным от UI. String tag – единственный способ идентифицировать этот фрагмент. Чтобы добавить этот фрагмент, вы используете метод add(Fragment, String) который не принимает View Id . Например:

 FragmentManager fm = getFragmentManager(); workFragment.setTargetFragment(this, 0); fm.beginTransaction().add(workFragment, "work").commit(); 

Затем, чтобы получить ссылку на использование этого фрагмента,

 workFragment = (WorkFragment)fm.findFragmentByTag("work"); 

Теперь, используя ссылку workFragment вы можете получить доступ ко всем методам этого фрагмента в Activity или его фрагменте пользовательского интерфейса. Вот полный пример фрагмента, отличного от UI.


Для фрагментов с пользовательским интерфейсом:

И хорошая практика, если Фрагмент изменил свое поведение на основе его тега?

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

Например: пользователь переключается на SettingsActivity из MainActivity , меняет настройки, нажимает кнопку «Назад», чтобы вернуться в MainActivity. Вы можете обнаружить изменение настроек в MainActivity # onResume () и обновить или изменить поведение текущего фрагмента в соответствии с новым параметром.

 FragmentManager fm = getFragmentManager(); uiFragment = (UiFragment) fm.findFragmentByTag("ui"); uiFragment.fetchNewData(); uiFragment.displayNewData();