Как я могу установить Fragment
, Id
чтобы я мог использовать getSupportFragmentManager().findFragmentById(R.id.--)
?
111
Как я могу установить Fragment
, Id
чтобы я мог использовать getSupportFragmentManager().findFragmentById(R.id.--)
?
Ответы:
Вы не можете установить идентификатор фрагмента программно .
Однако существует объект
String tag
, который можно установить внутри FragmentTransaction, который можно использовать для однозначной идентификации фрагмента.Как отметил Алексей, вы можете передать идентификатор
FragmentTransaction
«Sadd(int, Fragment)
методом. Однако это не указывает идентификатор для фрагмента. Он определяет идентификатор, в которыйViewGroup
нужно вставитьFragment
. Это не так полезно для той цели, которую я ожидаю, потому что он не однозначно идентифицируетFragment
s, ноViewGroup
s. Эти идентификаторы относятся к контейнерам, в которые можно динамически добавлять один или несколько фрагментов. Использование такого метода для идентификацииFragment
s потребует от васViewGroup
динамического добавления s в макет для каждогоFragment
вставляемого вами элемента. Это было бы довольно громоздко.Так что, если ваш вопрос заключается в том , чтобы создать уникальный идентификатор для фрагмента вы добавляете динамически, то ответ заключается в использовании
FragmentTransaction
«s надстройки (INT containerViewId, фрагмент фрагмента, строковый тег) метода иFragmentManager
» s findFragmentByTag (String) метод.В одном из моих приложений мне пришлось динамически генерировать строки. Но в любом случае это не так дорого по сравнению с фактическим FragmentTransaction.
Еще одно преимущество метода тега заключается в том, что он может идентифицировать фрагмент, который не добавляется в пользовательский интерфейс. См. Метод add (Fragment, String) FragmentTransaction .
Fragment
s не обязательно иметьView
s! Их также можно использовать для сохранения эфемерного состояния между изменениями конфигурации!источник
Оказывается, вам может не понадобиться знать идентификатор фрагмента.
Из документов:
Важная часть - «как идентификатор контейнера при добавлении в транзакцию».
так:
а потом
предоставит вам любой (потрясающий) фрагмент, хранящийся в R.id.fragment_holder.
источник
В большинстве случаев вы можете использовать тег фрагмента, а также идентификатор.
Вы можете установить значение тега в
FragmentTransaction.add(Fragment fragment, String tag );
. Затем вы можете использовать команду,FragmentManager.findFragmentByTag(String tab)
чтобы найти рассматриваемый фрагмент.источник
Как уже упоминали Том и другие, есть способы поставить тег на фрагмент и использовать этот тег для идентификации. Следующая проблема, с которой я столкнулся с этими решениями, заключается в том, что фрагмент не получает тег, пока он не связан с Activity (или, фактически, с
FragmentManager
). Что делать, если нужно идентифицировать фрагмент до того, как он был помечен?Пока все мои решения основаны на самом старом (Java) трюке в мире: создать минималистичный фрагмент шаблона, который принимает идентификатор в одном из своих конструкторов и предоставляет
getFragmentId()
метод, который возвращает этот идентификатор. Затем я позволяю тем фрагментам, которые нуждаются в ранней идентификации, расширять этот шаблон и; вуаля! Задача решена.Это решение может, к сожалению, потребовать набора фрагментов шаблона, по одному для каждого типа фрагмента
ListFragment
,DialogFragment
или просто старыхFragment
(POFO ?!), которые нуждаются в ранней идентификации. Но я думаю, что в случае с фрагментами это возможно, учитывая полученный выигрыш.Простите, что раздирала заживающие раны :-)
Ура!
источник
Используйте следующее:
Чтобы добавить фрагмент:
Чтобы идентифицировать существующий фрагмент:
источник
При использовании тега обязательно добавьте
, чтобы ваш фрагмент был возобновлен, а не уничтожен, как указано в руководствах разработчика.
Вы можете найти это в конце этой страницы .
Я потерял около 30 минут, пытаясь выяснить, почему мой фрагмент не был найден с помощью простого
findFragmentByTag();
вызоваисточник
В дополнение к ответу Тома метод replace также поддерживает тег фрагмента в дополнение к методу добавления.
источник