Как установить тег фрагмента по коду?
Я не нашел что-то вроде 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
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);
Comments