В 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();