¿Cómo puedo configurar un Fragment
's Id
para poder usarlo getSupportFragmentManager().findFragmentById(R.id.--)
?
111
¿Cómo puedo configurar un Fragment
's Id
para poder usarlo getSupportFragmentManager().findFragmentById(R.id.--)
?
Respuestas:
No puede establecer el ID de un fragmento mediante programación .
Sin embargo, hay una
String tag
que puede establecer dentro de FragmentTransaction que se puede utilizar para identificar de forma única un Fragment.Como Aleksey señaló, se puede pasar un identificador de
FragmentTransaction
'sadd(int, Fragment)
método. Sin embargo, esto no especifica el ID de un fragmento. Especifica el ID de aViewGroup
para insertar elFragment
. Esto no es tan útil para el propósito que espero que tenga, porque no identifica únicamenteFragment
s, sinoViewGroup
s. Estos ID son de contenedores a los que se pueden agregar uno o más fragmentos de forma dinámica. El uso de un método de este tipo para identificarFragment
s requeriría que agregueViewGroup
s dinámicamente al diseño para cadaFragment
que inserte. Eso sería bastante engorroso.Así que si tu pregunta es cómo crear un identificador único para un Fragmento va a añadir de forma dinámica, la respuesta es utilizar
FragmentTransaction
's add (int containerViewId, Fragmento fragmento, etiqueta de cadena) método yFragmentManager
s' findFragmentByTag (String) método.En una de mis aplicaciones, me vi obligado a generar cadenas de forma dinámica. Pero no es tan caro en relación con la FragmentTransaction real, de todos modos.
Otra ventaja del método de etiqueta es que puede identificar un Fragmento que no se está agregando a la IU. Consulte el método add (Fragment, String) de FragmentTransaction .
Fragment
s no necesita tenerView
s! ¡También se pueden usar para mantener un estado efímero entre cambios de configuración!fuente
Resulta que es posible que no necesite saber la identificación del fragmento.
De los documentos:
La parte importante es "como el ID del contenedor cuando se agrega en una transacción".
entonces:
y entonces
obtendrá cualquier fragmento (impresionante) que se encuentre en R.id.fragment_holder.
fuente
En la mayoría de los casos, puede utilizar la etiqueta de fragmento así como el ID.
Puede establecer el valor de la etiqueta en
FragmentTransaction.add(Fragment fragment, String tag );
. Luego, puede usar el comandoFragmentManager.findFragmentByTag(String tab)
para encontrar el fragmento en cuestión.fuente
Como ya mencionan Tom y otros, hay formas de poner una etiqueta en un fragmento y usar esa etiqueta para identificación. Un problema posterior con el que me he encontrado con esas soluciones es que el fragmento no obtiene una etiqueta hasta que se asocia con la Actividad (o, en realidad, la
FragmentManager
). ¿Qué hacer si se necesita identificar un fragmento antes de etiquetarlo?Hasta ahora, todas mis soluciones se basan en el truco más antiguo (Java) del mundo: crear un fragmento de plantilla minimalista que toma una identificación en uno de sus constructores y proporciona un
getFragmentId()
método que devuelve esa identificación. Luego dejo que esos fragmentos que necesitan una identificación temprana extiendan esa plantilla y; voila! Problema resuelto.Desafortunadamente, esta solución podría requerir un conjunto de fragmentos de plantilla, uno para cada tipo de fragmento
ListFragment
,DialogFragment
o simplemente antiguosFragment
(¿POFO?) Que necesitan una identificación temprana. Pero esto es manejable en el caso de los fragmentos, creo, considerando las ganancias proporcionadas.Perdón por romper las heridas que se están curando :-)
¡Salud!
fuente
Utilice lo siguiente:
Para agregar un fragmento:
Para identificar el fragmento existente:
fuente
Cuando use una etiqueta, asegúrese de agregar el
método para que su Fragmento se reanude en lugar de destruirse como se menciona en las guías para desarrolladores.
Puede encontrar esto al final de esta página .
Perdí unos 30 minutos tratando de averiguar por qué no se encontraba mi Fragmento a través de una simple
findFragmentByTag();
llamadafuente
Además de la respuesta de Tom, el método de reemplazo también admite la etiqueta de fragmento, además del método de adición.
fuente