¿Cómo puedo configurar Fragment
's Id
para que pueda usar getSupportFragmentManager().findFragmentById(R.id.--)
?Android - Establecer fragmento de identificación
Respuesta
No se puede establecer el ID de un fragmento de programación.
Sin embargo, hay un String tag
que puede establecer dentro de FragmentTransaction que se puede utilizar para identificar un Fragmento de manera única.
Como señaló Aleksey, puede pasar una identificación al método FragmentTransaction
de add(int, Fragment)
. Sin embargo, esto no especifica la ID para un Fragmento. Especifica la ID de ViewGroup
para insertar Fragment
en. Esto no es tan útil para el propósito que espero que tenga, porque no identifica de forma única Fragment
s, pero ViewGroup
s. Estos ID son de contenedores que un o más fragmentos se pueden agregar de forma dinámica. El uso de dicho método para identificar Fragment
s requeriría que agregue ViewGroup
s dinámicamente al Diseño por cada Fragment
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 método y add(int containerViewId, Fragment fragment, String tag)FragmentManager
' s findFragmentByTag(String) método.
En una de mis aplicaciones, me vi obligado a generar cadenas dinámicamente. 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 interfaz de usuario. Vea el método add(Fragment, String) de FragmentTransaction. Fragment
s no necesita tener View
s! ¡También se pueden usar para mantener el estado efímero entre cambios de configuración!
En la mayoría de los casos, puede usar la etiqueta de fragmento así como la ID.
Puede establecer el valor de la etiqueta en FragmentTransaction.add(Fragment fragment, String tag);
. Luego puede usar el comando FragmentManager.findFragmentByTag(String tab)
para encontrar el fragmento en cuestión.
Como Tom y otros ya han mencionado, hay formas de poner una etiqueta en un fragmento y usar esa etiqueta para su identificación. Un problema posterior que he encontrado con esas soluciones es que el fragmento no recibe una etiqueta hasta que se asocia con la Actividad (o, en realidad, el FragmentManager
). ¿Qué hacer si uno necesita identificar un fragmento antes de que haya sido etiquetado?
Mis soluciones hasta ahora 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 método getFragmentId()
que devuelve esa identificación. Luego dejo que los fragmentos que necesitan una identificación temprana amplíen esa plantilla y; voila! Problema resuelto.
Esta solución podría, por desgracia, requieren un conjunto de fragmentos de plantilla, una para cada tipo de fragmento, ListFragment
, DialogFragment
o llanura de edad Fragment
(pofo ?!) que necesitan la identificación temprana. Pero esto es manejable en el caso de los fragmentos, creo, teniendo en cuenta las ganancias proporcionadas.
Lo siento por desgarrar la curación de heridas :-)
Salud!
Resulta que puede que no necesite conocer la identificación del fragmento.
A partir de los documentos:
public abstract Fragment findFragmentById (int id)
Finds a fragment that was identified by the given id either
when inflated from XML or as the container ID when added in
a transaction.
La parte importante es "como el ID del contenedor cuando se añade en una transacción".
manera:
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fragment_holder, new AwesomeFragment())
.commit();
y luego
AwesomeFragment awesome = (AwesomeFragment)
getSupportFragmentManager()
.findFragmentById(R.id.fragment_holder);
le conseguirá lo que sea (impresionante) fragmento se llevó a cabo en R.id.fragment_holder.
Además de la respuesta de Tom, el método de reemplazo también admite la etiqueta de fragmento, además de agregar el método.
Usar la siguiente:
Para añadir un fragmento:
getFragmentManager().beginTransaction().add(R.id.fragment_container, fragmentToBeAdded, tag).commit();
Para identificar el fragmento existente:
getFragmentManager().findFragmentByTag(fragmentName);
- 1. Establecer nueva identificación con jQuery
- 2. Android Fragmento backStack tema
- 3. Identificación única de Android
- 4. Obtener vista de contenedores del fragmento de Identificación del
- 5. Android llegar Fragmento anchura
- 6. Android Fragmento y GetWindow()
- 7. Android conseguir fragmento que está en FragmentPagerAdapter
- 8. Android - Pantalla de fragmento girar
- 9. Establecer nuevo diseño en el fragmento
- 10. Android TabHost dentro del fragmento
- 11. Android ListView en fragmento ejemplo
- 12. Fragmento animación personalizada transacción - Android
- 13. establecer el adaptador de vista de lista en un fragmento en android
- 14. Fragmento de Android onCreateView con gestos
- 15. Android: actividad de llamadas desde el fragmento
- 16. Android c2dm formato de identificación de registro
- 17. Android: Identificación de vista de lista
- 18. Identificación única de una actividad de Android
- 19. android - ¿Cómo crear la identificación de xml?
- 20. Identificación de nombres en Aplicaciones Android
- 21. Android Eliminar Fragmento y ver desde BackStack
- 22. deslizando un fragmento sobre otro en Android
- 23. Fragmento Android onCreateView frente a onActivityCreated
- 24. Android: Agregar un fragmento a una actividad
- 25. fragmento android cuando llamar a bitmap.recycle()
- 26. cómo usar el fragmento en Android 2.2?
- 27. Android: Fragmento no puede realizar actividad
- 28. Doble fragmento que rota Android con ActionBar
- 29. Android Service.startForeground no respeta Identificación notificación singularidad
- 30. Android: identificación del producto en la aplicación
Si utilizo la etiqueta y no el ID para el fragmento, ¿cómo Uso la llamada de reemplazo que necesita una identificación de recurso de fragmento? – Namratha
@Namratha, no puedes. –
@TomDignan ¿Qué tal un fragmento que se agregará en un ViewPager? ¿Cómo puedo configurar su etiqueta? No puedo usar transacciones en esta situación. – GuilhE