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

Я не нашел что-то вроде 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-файла макета активности.

" поставьте атрибут android: tag с уникальной строкой."

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

    android:tag="unique_tag"

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


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

для версии V4 fragmets

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

для приложения.фрагмент

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

Я знаю, что это было 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);

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

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");
    }
}

}


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

пример:-

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