Как установить тег фрагмента по коду? - PullRequest
131 голосов
/ 16 июня 2011

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

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

Ответы [ 7 ]

112 голосов
/ 17 июня 2011

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

Я определил это путем изучения источников совместимости, когда я кратко искал аналогичные в некоторыхточка в прошлом.

69 голосов
/ 25 сентября 2013

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

Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
    .replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
    .addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit(); 
32 голосов
/ 14 августа 2012

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

"Укажите для атрибута тега android: уникальную строку."

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

    android:tag="unique_tag"

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

4 голосов
/ 17 октября 2014

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

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

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

Для app.fragment

List<Fragment> allFragments = getFragmentManager().getFragments();
0 голосов
/ 29 мая 2018

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

   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");
        }
    }
}
0 голосов
/ 25 февраля 2018

Я знаю, что это было 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);
0 голосов
/ 15 августа 2013

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

Пример : -

    final Bundle args = new Bundle();
    args.putString("TAG", "my tag");
    fragment.setArguments(args);
...