Sobes.tech
Junior

Como implementar fragmentos numa Activity?

sobes.tech IA

Resposta da IA

Nos fragmentos de Activity podem ser implementados de forma declarativa em XML ou programaticamente usando FragmentManager.

De forma declarativa (em XML):

<fragment
    android:id="@+id/my_fragment"
    android:name="com.example.MyFragment" // Nome completo da classe do fragmento
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  • O fragmento é adicionado ao criar a Activity.
  • Fácil de usar para layouts estáticos.
  • Menos flexível para operações dinâmicas.

Programaticamente (com FragmentManager):

// Dentro de um método da Activity, por exemplo, onCreate ou em um evento
val fragmentManager = supportFragmentManager // Para AppCompatActivity
val fragmentTransaction = fragmentManager.beginTransaction()

// Adicionar um fragmento
val myFragment = MyFragment()
fragmentTransaction.add(R.id.fragment_container, myFragment)

// Substituir um fragmento (remove o existente no contêiner e adiciona um novo)
// val newFragment = NewFragment()
// fragmentTransaction.replace(R.id.fragment_container, newFragment)

// Remover um fragmento
// val fragmentToRemove = fragmentManager.findFragmentById(R.id.fragment_container)
// if (fragmentToRemove != null) {
//     fragmentTransaction.remove(fragmentToRemove)
// }

// Adicionar à pilha de navegação (permite voltar ao fragmento anterior com o botão "Voltar")
fragmentTransaction.addToBackStack(null) // String de etiqueta para a pilha de navegação (pode ser null)

// Finalizar a transação
fragmentTransaction.commit() // Execução assíncrona
// ou
// fragmentTransaction.commitNow() // Execução síncrona
  • Usa FragmentManager para gerenciar os fragmentos.
  • FragmentTransaction é usado para realizar operações (adicionar, remover, substituir, etc.).
  • Oferece maior flexibilidade para alterar dinamicamente a UI em tempo de execução.
  • Pode gerenciar a pilha de navegação para navegação.

Uso do contêiner:

Para adicionar ou substituir fragmentos programaticamente, geralmente usa-se um contêiner no layout XML da Activity, como FrameLayout ou LinearLayout:

<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Depois, no código da Activity, o fragmento é adicionado ou substituído dentro desse contêiner.

Aspectos importantes:

  • O ciclo de vida do fragmento está estreitamente relacionado ao ciclo de vida da Activity.
  • O FragmentManager gerencia o ciclo de vida e o estado dos fragmentos.
  • A transação de fragmentos é realizada de forma atômica (ou toda a operação ou nenhuma).
  • Ao usar a pilha de navegação, é necessário chamar addToBackStack().
  • Para trabalhar com fragmentos no AppCompatActivity, use supportFragmentManager.