Fragment: o que é, fragmentos e FragmentManager no Android

Autor: IT Sectr Publicado: 2026-02-22 Tempo de leitura: 7 min

Fragment é um componente de UI reutilizável no Android que é incorporado a uma Activity e gerenciado através do FragmentManager. Cada fragmento tem seu próprio ciclo de vida, layout e estado. Fragment simplifica a adaptação a diferentes tamanhos de tela e a reutilização de código. Leia mais no guia oficial do Google.

Pontos principais

  • Fragment — um componente de UI dentro de uma Activity com seu próprio ciclo de vida e layout
  • FragmentManager — uma classe para gerenciar transações de fragmentos e a pilha de retorno
  • FragmentTransaction — uma operação atômica para adicionar, substituir ou remover fragmentos
  • Jetpack Fragment — uma biblioteca para compatibilidade retroativa até Android 1.6 (API 4)
  • ViewModel — um componente compartilhado para troca de dados entre fragmentos em uma mesma Activity

O que é Fragment?

Fragment é um componente de interface de usuário modular do Android que representa uma parte da tela dentro de uma Activity. Fragment pode gerenciar seu próprio layout, lidar com eventos do ciclo de vida e salvar seu estado. Graças à modularidade, um mesmo fragmento pode ser usado em diferentes Activities e em diferentes dispositivos.

A API Fragment surgiu no Android 3.0 (Honeycomb, API 11) em 2011 para suportar tablets. Antes disso, os desenvolvedores precisavam criar Activities separadas para celular e tablet. Fragment permitiu montar uma tela a partir de blocos independentes. Em 2019, o Google lançou a biblioteca Jetpack Fragment com compatibilidade retroativa até API 4.

Segundo o Google (2026), 80% dos aplicativos na Google Play usam Fragment de alguma forma. A biblioteca Jetpack Fragment foi baixada mais de 10 bilhões de vezes através do Google Play Services. Fragment continua sendo um componente chave da arquitetura Android mesmo na era do Jetpack Compose.

Ciclo de vida do Fragment

O ciclo de vida do Fragment é mais complexo que o da Activity porque depende do estado da Activity hospedeira. Fragment passa pelos mesmos estados que a Activity, mas adiciona seus próprios callbacks: onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach.

Callback do FragmentEquivalente na ActivityPropósito
onAttachantes do onCreateFragment anexado à Activity
onCreateonCreateInicialização de dados não relacionados à UI
onCreateViewonCreateCriação do layout via inflater
onViewCreatedonCreateVinculação de elementos UI após criação da view
onDestroyViewonDestroyRemoção da view, liberação de recursos UI
onDetachonDestroyFragment desanexado da Activity

Comparação do ciclo de vida Fragment e Activity

A principal diferença do ciclo de vida do Fragment é a invocação de onCreateView e onDestroyView entre onCreate e onDestroy. Fragment pode existir sem UI (se onCreateView retornar null). Após a recriação da Activity, o FragmentManager restaura os fragmentos automaticamente.

FragmentManager e transações

FragmentManager é a classe central para gerenciar fragmentos em uma Activity. Ele é responsável por adicionar, remover, substituir fragmentos, gerenciar a pilha de retorno e restaurar o estado. FragmentManager está disponível através de supportFragmentManager (AndroidX) ou fragmentManager (API antiga).

kotlin
class MainActivity : AppCompatActivity() {

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

        // Fragmento ainda não adicionado — criando
        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()
    }
}

As transações FragmentTransaction são atômicas. commit() agenda a execução para o próximo ciclo do Looper. Para execução imediata use commitNow(). addToBackStack(null) adiciona a transação à pilha de retorno — o botão de voltar desfará a operação.

Métodos do ciclo de vida do Fragment

Vamos examinar os principais métodos do ciclo de vida do Fragment com um exemplo em Kotlin. onCreateView cria um layout — diferentemente da Activity, o método deve retornar uma View. onViewCreated é chamado imediatamente depois, aqui é seguro encontrar elementos por id. onDestroyView é o último momento para limpar referências de view.

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("Detalhes")
    }

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

O padrão View Binding com _binding/binding garante que após onDestroyView a referência ao layout seja anulada. Acessar binding após a destruição da view causará NullPointerException. Este padrão é recomendado pelo Google para todos os fragmentos.

Transferência de dados entre fragmentos

Para transferência de dados entre fragmentos, o Android oferece vários mecanismos. O mais confiável é um ViewModel compartilhado entre fragmentos de uma mesma Activity. Fragment Result API é adequado para eventos únicos. Argumentos Bundle são para dados ao criar um fragmento.

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

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

// Fragmento A: envia evento via Fragment Result API
setFragmentResult("request_key", bundleOf("key" to "value"))

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

Fragment Result API (adicionado no Fragment 1.3.0) substitui os obsoletos setTargetFragment/onActivityResult. A API é type-safe, usa Bundle e não requer conhecimento do receptor. Parent FragmentManager atua como intermediário entre fragmentos.

Fragment vs Activity: quando escolher o quê

A escolha entre Fragment e Activity depende da arquitetura do aplicativo. Fragment é obrigatório para layouts adaptativos (telefone + tablet), para animações de transição personalizadas e para usar Jetpack Navigation. Activity é preferível para aplicativos simples com uma ou duas telas.

CritérioFragmentActivity
Velocidade de criaçãoMais rápida (componente leve)Mais lenta (processo do sistema)
ReutilizaçãoAlta (um fragmento em diferentes Activities)Baixa (cada tela tem sua Activity)
Animação de transiçãoFlexível (FragmentTransaction)Limitada (overridePendingTransition)
Preservação ao rotacionarAutomática (o gerenciador restaura)Manual (onSaveInstanceState)
Deep LinksAtravés do Navigation ComponentSuporte nativo via intent-filter

Jetpack Fragment e Jetpack Navigation

A abordagem moderna para trabalhar com Fragment é o Jetpack Navigation Component, que substitui o gerenciamento manual do FragmentManager. A biblioteca fornece NavGraph (grafo de navegação XML), NavHostFragment e Safe Args para transferência de dados type-safe.

Jetpack Fragment library (androidx.fragment:fragment-ktx) inclui FragmentResult API, DialogFragment, BottomSheetDialogFragment e integração com componentes Lifecycle-aware. Desde 2026, o Google recomenda usar Fragment apenas através do Jetpack Navigation, não diretamente.

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="Detalhes" />
</navigation>

Perguntas frequentes

O que é FragmentManager?

FragmentManager é uma classe que gerencia transações de fragmentos. Ela adiciona, remove e substitui fragmentos em um contêiner da Activity. FragmentManager restaura o estado dos fragmentos ao recriar a Activity e gerencia a pilha de retorno.

Como Fragment difere de Activity?

Fragment é uma parte da UI dentro de uma Activity, não pode existir independentemente. Fragment sobrevive à recriação da Activity ao rotacionar a tela. Activity é uma tela completa com seu próprio Lifecycle, Fragment depende do Lifecycle da Activity.

Quando usar Fragment em vez de Activity?

Fragment — quando uma tela consiste em vários blocos independentes (abas, mestre-detalhe, adaptação para tablet). Activity — quando uma tela não possui blocos repetíveis. Google recomenda Single Activity + múltiplos Fragment.

Como transferir dados entre Fragment?

Três formas: através da Activity pai (um ViewModel compartilhado), através do Fragment Result API (setFragmentResult), através de argumentos Bundle ao criar um Fragment. ViewModel é o método preferido, pois os dados são preservados durante a recriação.

O que é Fragment Transaction?

Fragment Transaction é uma operação atômica que altera o conjunto de fragmentos. FragmentManager.beginTransaction() abre uma transação onde se pode chamar add, remove, replace, hide, show. Cada transação termina com commit() ou commitNow().

Resumo

  • Fragment é um componente de UI reutilizável dentro de uma Activity com seu próprio ciclo de vida, layout e estado
  • FragmentManager gerencia transações de fragmentos e restaura seu estado ao recriar a Activity
  • FragmentTransaction é uma operação atômica para adicionar, substituir, remover e ocultar fragmentos
  • O ciclo de vida do Fragment inclui seis callbacks, de onAttach a onDetach, com um ponto adicional onCreateView
  • ViewModel é a forma recomendada de trocar dados entre fragmentos em uma mesma Activity
  • Fragment Result API fornece transferência type-safe de eventos únicos entre fragmentos

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também