Como posso definir um Fragment
's Id
para que eu possa usargetSupportFragmentManager().findFragmentById(R.id.--)
?
111
Como posso definir um Fragment
's Id
para que eu possa usargetSupportFragmentManager().findFragmentById(R.id.--)
?
Respostas:
Você não pode definir o ID de um fragmento de forma programática .
No entanto, há um
String tag
que você pode definir dentro da FragmentTransaction que pode ser usado para identificar exclusivamente um Fragment.Como Aleksey apontou, você pode passar um ID para
FragmentTransaction
oadd(int, Fragment)
método de. No entanto, isso não especifica o ID de um fragmento. Ele especifica o ID de umViewGroup
no qual inserirFragment
. Isso não é tão útil para o propósito que espero que você tenha, porque não identifica exclusivamenteFragment
s, masViewGroup
s. Esses IDs são de contêineres aos quais um ou mais fragmentos podem ser adicionados dinamicamente. Usar tal método para identificarFragment
s exigiria que você adicionasseViewGroup
s dinamicamente ao Layout para cadaFragment
inserção. Isso seria muito complicado.Portanto, se sua pergunta é como criar um identificador exclusivo para um fragmento que você está adicionando dinamicamente, a resposta é usar
FragmentTransaction
de add (int containerViewId, Fragmento fragmento, String tag) método eFragmentManager
's findFragmentByTag (String) método.Em um de meus aplicativos, fui forçado a gerar strings dinamicamente. Mas não é tão caro em relação à FragmentTransaction real, de qualquer maneira.
Outra vantagem do método de tag é que ele pode identificar um Fragment que não está sendo adicionado à IU. Consulte o método add (Fragment, String) de FragmentTransaction .
Fragment
s não precisa terView
s! Eles também podem ser usados para manter o estado efêmero entre as alterações de configuração!fonte
Acontece que você pode não precisar saber a id do fragmento.
Dos documentos:
A parte importante é "como o ID do contêiner quando adicionado em uma transação".
tão:
e depois
obterá qualquer fragmento (incrível) mantido em R.id.fragment_holder.
fonte
Na maioria dos casos, você pode usar a tag do fragmento e também o ID.
Você pode definir o valor do tag em
FragmentTransaction.add(Fragment fragment, String tag );
. Então você pode usar o comandoFragmentManager.findFragmentByTag(String tab)
para encontrar o fragmento em questão.fonte
Como Tom e outros já mencionaram, existem maneiras de colocar uma etiqueta em um fragmento e usar essa etiqueta para identificação. Um problema subsequente que encontrei com essas soluções é que o fragmento não recebe uma tag até que seja associado à Activity (ou, na verdade, a
FragmentManager
). O que fazer se for necessário identificar um fragmento antes de ser marcado?Minhas soluções até agora contam com o truque (Java) mais antigo do mundo: criar um fragmento de modelo minimalista que leva um id em um de seus construtores e fornece um
getFragmentId()
método que retorna esse id. Em seguida, deixo que os fragmentos que precisam de identificação precoce estendam esse modelo e; voila! Problema resolvido.Esta solução pode, infelizmente, exigir um conjunto de fragmentos de modelo, um para cada tipo de fragmento
ListFragment
,DialogFragment
ou simplesFragment
(POFO ?!) que precisam de identificação antecipada. Mas isso é administrável no caso de fragmentos, eu acho, considerando os ganhos proporcionados.Desculpe por rasgar feridas curativas :-)
Felicidades!
fonte
Use o seguinte:
Para adicionar um fragmento:
Para identificar o fragmento existente:
fonte
Ao usar uma tag, certifique-se de adicionar o
método para que seu Fragment seja retomado em vez de destruído conforme mencionado nos guias do desenvolvedor.
Você pode encontrar isso no final desta página .
Perdi cerca de 30 minutos tentando descobrir por que meu Fragment não foi encontrado através de uma simples
findFragmentByTag();
ligaçãofonte
Além da resposta de Tom, o método replace também oferece suporte à tag fragment, além do método add.
fonte