Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Его можно использовать, чтобы избежать повторного создания изменения ориентации 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 одним и тем же тегом.

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

Ответ 2

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

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

Иногда 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();