В Android вы можете установить тег для фрагмента в FragmentTransaction.
Почему мне нужно установить тег для фрагмента?
И хорошо ли, если Фрагмент изменил свое поведение на основе его тега?
В Android вы можете установить тег для фрагмента в FragmentTransaction.
Почему мне нужно установить тег для фрагмента?
И хорошо ли, если Фрагмент изменил свое поведение на основе его тега?
Его можно использовать, чтобы избежать повторного создания изменения ориентации Fragment on 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();
}
}
Activity воссоздается при изменении ориентации и вызывается метод onCreate(...). Если Fragment был создан до того, как Activity был уничтожен и был добавлен в FragmentManager с тегом, теперь он может быть извлечен из FragmentManager одним и тем же тегом.
Для более подробного обсуждения того, как его можно использовать, см.
Почему мне нужно установить тег для фрагмента?
Иногда Fragment можно использовать в качестве рабочего фона для Activity. Такой фрагмент не имеет пользовательского интерфейса, его также называют не-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();