Fragment: qué es, fragmentos y FragmentManager en Android

Autor: IT Sectr Publicado: 2026-02-22 Tiempo de lectura: 7 min

Fragment es un componente de UI reutilizable en Android que se inserta en una Activity y se gestiona a través de FragmentManager. Cada fragmento tiene su propio ciclo de vida, layout y estado. Fragment simplifica la adaptación a diferentes tamaños de pantalla y la reutilización de código. Lea más en la guía oficial de Google.

Puntos clave

  • Fragment — un componente de UI dentro de una Activity con su propio ciclo de vida y layout
  • FragmentManager — una clase para gestionar transacciones de fragmentos y la pila de retroceso
  • FragmentTransaction — una operación atómica para añadir, reemplazar o eliminar fragmentos
  • Jetpack Fragment — una biblioteca para compatibilidad hacia atrás hasta Android 1.6 (API 4)
  • ViewModel — un componente compartido para intercambiar datos entre fragmentos en una misma Activity

¿Qué es Fragment?

Fragment es un componente modular de interfaz de usuario de Android que representa una parte de la pantalla dentro de una Activity. Fragment puede gestionar su propio layout, manejar eventos del ciclo de vida y guardar su estado. Gracias a la modularidad, un mismo fragmento puede usarse en diferentes Activities y en diferentes dispositivos.

La API de Fragment apareció en Android 3.0 (Honeycomb, API 11) en 2011 para dar soporte a tabletas. Antes de eso, los desarrolladores tenían que crear Activities separadas para teléfono y tableta. Fragment permitió ensamblar una pantalla a partir de bloques independientes. En 2019, Google lanzó la biblioteca Jetpack Fragment con compatibilidad hacia atrás hasta API 4.

Según Google (2026), el 80% de las aplicaciones en Google Play usan Fragment de alguna forma. La biblioteca Jetpack Fragment se ha descargado más de 10 mil millones de veces a través de Google Play Services. Fragment sigue siendo un componente clave de la arquitectura Android incluso en la era de Jetpack Compose.

Ciclo de vida de Fragment

El ciclo de vida de Fragment es más complejo que el de Activity porque depende del estado de la Activity anfitriona. Fragment pasa por los mismos estados que Activity pero añade sus propios callbacks: onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach.

Callback de FragmentEquivalente en ActivityPropósito
onAttachantes de onCreateFragment adjunto a Activity
onCreateonCreateInicialización de datos no relacionados con UI
onCreateViewonCreateCreación del layout mediante inflater
onViewCreatedonCreateVinculación de elementos UI tras crear la vista
onDestroyViewonDestroyEliminación de la vista, liberación de recursos UI
onDetachonDestroyFragment desvinculado de Activity

Comparación del ciclo de vida de Fragment y Activity

La principal diferencia del ciclo de vida de Fragment es la invocación de onCreateView y onDestroyView entre onCreate y onDestroy. Fragment puede existir sin UI (si onCreateView devuelve null). Tras la recreación de Activity, FragmentManager restaura los fragmentos automáticamente.

FragmentManager y transacciones

FragmentManager es la clase central para gestionar fragmentos en una Activity. Se encarga de añadir, eliminar, reemplazar fragmentos, gestionar la pila de retroceso y restaurar el estado. FragmentManager está disponible a través de supportFragmentManager (AndroidX) o fragmentManager (API antigua).

kotlin
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Fragmento aún no añadido — creando
        if (savedInstanceState == null) {
            val transaction = this.supportFragmentManager
                .beginTransaction()
            transaction.add(R.id.fragment_container, ListFragment())
            transaction.addToBackStack(null)
            transaction.commit()
        }
    }

    fun replaceFragment(fragment: Fragment) {
        supportFragmentManager.beginTransaction()
            .replace(R.id.fragment_container, fragment)
            .addToBackStack(null)
            .commit()
    }
}

Las transacciones de FragmentTransaction son atómicas. commit() programa la ejecución para el siguiente ciclo de Looper. Para ejecución inmediata use commitNow(). addToBackStack(null) añade la transacción a la pila de retroceso — el botón de retroceso deshará la operación.

Métodos del ciclo de vida de Fragment

Veamos los métodos clave del ciclo de vida de Fragment con un ejemplo en Kotlin. onCreateView crea un layout — a diferencia de Activity, el método debe devolver un View. onViewCreated se llama inmediatamente después, aquí es seguro encontrar elementos por id. onDestroyView es el último momento para limpiar referencias a la vista.

kotlin
class DetailFragment : Fragment() {

    private var _binding: FragmentDetailBinding? = null
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentDetailBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.textTitle.setText("Detalles")
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

El patrón View Binding con _binding/binding garantiza que después de onDestroyView la referencia al layout se anula. Acceder a binding después de destruir la vista generará NullPointerException. Google recomienda este patrón para todos los fragmentos.

Transferencia de datos entre fragmentos

Para la transferencia de datos entre fragmentos, Android ofrece varios mecanismos. El más fiable es un ViewModel compartido entre fragmentos de una misma Activity. Fragment Result API es adecuado para eventos únicos. Los argumentos Bundle son para datos al crear un fragmento.

kotlin
// ViewModel compartido para dos fragmentos
class SharedViewModel : ViewModel() {
    private val _selectedItem = MutableLiveData<Item>()
    val selectedItem: LiveData<Item> = _selectedItem

    fun select(item: Item) { _selectedItem.setValue(item) }
}

// Fragmento A: envía evento mediante Fragment Result API
setFragmentResult("request_key", bundleOf("key" to "value"))

// Fragmento B: recibe evento
childFragmentManager.setFragmentResultListener("request_key", this) { requestKey, bundle ->
    val value = bundle.getString("key")
}

Fragment Result API (añadido en Fragment 1.3.0) reemplaza los obsoletos setTargetFragment/onActivityResult. La API es type-safe, usa Bundle y no requiere conocer al receptor. Parent FragmentManager actúa como intermediario entre fragmentos.

Fragment vs Activity: cuándo elegir qué

La elección entre Fragment y Activity depende de la arquitectura de la aplicación. Fragment es obligatorio para layouts adaptativos (teléfono + tableta), para animaciones de transición personalizadas y para usar Jetpack Navigation. Activity es preferible para aplicaciones simples con una o dos pantallas.

CriterioFragmentActivity
Velocidad de creaciónMás rápida (componente ligero)Más lenta (proceso del sistema)
ReutilizaciónAlta (un fragmento en diferentes Activities)Baja (cada pantalla tiene su Activity)
Animación de transicionesFlexible (FragmentTransaction)Limitada (overridePendingTransition)
Conservación al rotarAutomática (el gestor restaura)Manual (onSaveInstanceState)
Deep LinksA través de Navigation ComponentSoporte nativo mediante intent-filter

Jetpack Fragment y Jetpack Navigation

El enfoque moderno para trabajar con Fragment es Jetpack Navigation Component, que reemplaza la gestión manual de FragmentManager. La biblioteca proporciona NavGraph (grafo de navegación XML), NavHostFragment y Safe Args para transferencia de datos type-safe.

Jetpack Fragment library (androidx.fragment:fragment-ktx) incluye FragmentResult API, DialogFragment, BottomSheetDialogFragment e integración con componentes Lifecycle-aware. Desde 2026, Google recomienda usar Fragment solo a través de Jetpack Navigation, no directamente.

xml

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:startDestination="@+id/listFragment">

    <fragment
        android:id="@+id/listFragment"
        android:name=".ListFragment"
        android:label="Lista">
        <action
            android:id="@+id/action_list_to_detail"
            app:destination="@+id/detailFragment" />
    </fragment>

    <fragment
        android:id="@+id/detailFragment"
        android:name=".DetailFragment"
        android:label="Detalles" />
</navigation>

Preguntas frecuentes

¿Qué es FragmentManager?

FragmentManager es una clase que gestiona transacciones de fragmentos. Añade, elimina y reemplaza fragmentos en un contenedor de Activity. FragmentManager restaura el estado de los fragmentos al recrear la Activity y gestiona la pila de retroceso.

¿En qué se diferencia Fragment de Activity?

Fragment es una parte de la UI dentro de una Activity, no puede existir de forma independiente. Fragment sobrevive a la recreación de Activity al rotar la pantalla. Activity es una pantalla completa con su propio Lifecycle, Fragment depende del Lifecycle de Activity.

¿Cuándo usar Fragment en lugar de Activity?

Fragment — cuando una pantalla consta de varios bloques independientes (pestañas, maestro-detalle, adaptación a tableta). Activity — cuando una pantalla no tiene bloques repetibles. Google recomienda Single Activity + múltiples Fragment.

¿Cómo transferir datos entre Fragment?

Tres formas: a través de la Activity padre (un ViewModel compartido), a través de Fragment Result API (setFragmentResult), mediante argumentos Bundle al crear un Fragment. ViewModel es el método preferido ya que los datos se conservan durante la recreación.

¿Qué es Fragment Transaction?

Fragment Transaction es una operación atómica que cambia el conjunto de fragmentos. FragmentManager.beginTransaction() abre una transacción donde se puede llamar a add, remove, replace, hide, show. Cada transacción termina con commit() o commitNow().

Resumen

  • Fragment es un componente de UI reutilizable dentro de una Activity con su propio ciclo de vida, layout y estado
  • FragmentManager gestiona transacciones de fragmentos y restaura su estado al recrear la Activity
  • FragmentTransaction es una operación atómica para añadir, reemplazar, eliminar y ocultar fragmentos
  • El ciclo de vida de Fragment incluye seis callbacks, desde onAttach hasta onDetach, con un punto adicional onCreateView
  • ViewModel es la forma recomendada de intercambiar datos entre fragmentos en una misma Activity
  • Fragment Result API proporciona transferencia type-safe de eventos únicos entre fragmentos

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también