Как установить тег фрагмента по коду?

Я не нашел что-то вроде setTag(String tagName) метод в Fragment учебный класс. Единственный способ установить Fragment тег, который я нашел, делает FragmentTransaction и передача имени тега в качестве параметра.

Это единственный способ явно установить Fragment тег по коду?

7 ответов

Решение

Да. Таким образом, единственный способ - во время транзакции, например, используя add, replaceили как часть макета.

Я определил это путем изучения источников совместимости, так как я кратко искал подобное в какой-то момент в прошлом.

Вы можете установить тег для фрагмента следующим образом:

Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
    .replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
    .addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit(); 

Вы можете предоставить тег внутри вашего XML-файла макета активности.

Msgstr "Укажите в атрибуте android:tag уникальную строку."

так же, как вы назначаете идентификатор в формате XML.

    android:tag="unique_tag"

ссылка на руководство разработчика

Вы также можете получить все фрагменты, как это:

Для фрагментов v4

List<Fragment> allFragments = getSupportFragmentManager().getFragments();

Для app.fragment

List<Fragment> allFragments = getFragmentManager().getFragments();

Это лучший способ, который я нашел:

public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState == null) {
      // Let's first dynamically add a fragment into a frame container
      getSupportFragmentManager().beginTransaction(). 
          replace(R.id.flContainer, new DemoFragment(), "SOMETAG").
          commit();
      // Now later we can lookup the fragment by tag
      DemoFragment fragmentDemo = (DemoFragment) 
          getSupportFragmentManager().findFragmentByTag("SOMETAG");
    }
}

}

В настоящее время есть более простой способ добиться этого, если вы используете DialogFragment (не Fragment):

val yourDialogFragment = YourDialogFragment()
yourDialogFragment.show(
    activity.supportFragmentManager,
    "YOUR_TAG_FRAGMENT"
)

Под капотом show() метод действительно создает FragmentTransaction и добавляет тег, используя add()метод. Но гораздо удобнее пользоваться show() метод на мой взгляд.

Вы можете сократить это на Fragmentтоже, используя расширение Kotlin:)

Я знаю, что это было 6 лет назад, но если кто-то сталкивается с той же проблемой, делайте так, как я:

-Создать обычай Fragment Класс с полем тега:

public class MyFragment extends Fragment {
 private String _myTag;
 public void setMyTag(String value)
 {
   if("".equals(value))
     return;
   _myTag = value;
 }
 //other code goes here
}

-Перед добавлением фрагмента в sectionPagerAdapter установите тег так:

 MyFragment mfrag= new MyFragment();
 mfrag.setMyTag("TAG_GOES_HERE");
 sectionPagerAdapter.AddFragment(mfrag);

Вы можете добавить тег в качестве свойства для Fragment аргументы. Он будет автоматически восстановлен, если фрагмент будет уничтожен, а затем воссоздан ОС.

Пример:-

    final Bundle args = new Bundle();
    args.putString("TAG", "my tag");
    fragment.setArguments(args);
Другие вопросы по тегам