Executando verificação de segurança...
2

Explorando como usar fragmentos no desenvolvimento android

Antes de tudo vou logo dizendo que eu ainda sou iniciante no desenvolvimento Android, e eu ainda programo pelo celular, então não vao ser possível colocar exemplos usando o Android Studio.

Olá, desenvolvedores Android! 👋 Hoje, vamos enteder um pouco sobre fragmentos e descobrir como eles podem transformar a maneira de como projetamos interfaces em aplicativos

O Que São Fragmentos?

Se você está começando no desenvolvimento Android, entender os fragmentos é fundamental. Eles funcionam como módulos de uma atividade, proporcionando flexibilidade e reutilização. Pense neles como peças de Lego para construir interfaces dinâmicas.

Configurando Dependências

Antes de mergulharmos nos fragmentos, precisamos configurar algumas dependências. Adicione o repositório Maven do Google ao seu projeto no arquivo build.gradle de nível superior:

dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
      google()
  }
}

Adicione a dependência ao fragment-ktx no arquivo build.gradle do módulo:

dependencies {
  implementation("androidx.fragment:fragment-ktx:1.5.5")
}

Criando o Layout para o Fragmento

Antes de implementarmos a classe, preparemos o ambiente. Crie um novo layout chamado fragment_example.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Fragment Example"
        android:textColor="@android:color/white"
        android:textSize="22sp"
        android:textStyle="bold" />

</LinearLayout>

Agora, defina o local do fragmento no layout principal activity_main.xml usando FragmentContainerView:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

Criando a Classe do Fragmento

Finalmente, criamos a classe do fragmento estendendo Fragment e utilizando o método onCreateView:

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.ViewGroup

class ExampleFragment: Fragment() {
  override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View {
    return inflater.inflate(R.layout.fragment_example, container, false)
  }
}

Alternativa Concisa

Uma abordagem mais enxuta para criar um fragmento:

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.View;

class ExampleFragment: Fragment(R.layout.fragment_example) {
  override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
  }
}

Essa abordagem dispensa a necessidade de reescrever o método onCreateView. Eu vi em muitos tutoriais e códigos por ai e que eles costumam a colocar as lógicas do fragmento dentro do método onCreateView(), porém isso é um pouco preocupante, pois como no exemplo acima é mais apropriado é colocar dentro do onViewCreated(), pois ele é chamado após o fragmento ser anexado a activity e o layout ser inflado. Veja mais do ciclo de vida de um fragment

Anexando o fragmento a activity

Agora, há duas maneiras de anexar o fragmento ao container definido anteriormente em activity_main.xml, que é via XML ou programaticamente.

Via XML

Para anexar diretamente o fragmento no XML basta usar o atributo android:name e dizer o caminho onde o fragment está, que no nosso exemplo está localizado em com.example.example.ExampleFragment

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment_container"
        android:name="com.example.example.ExampleFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

Programaticamente

Para anexar programaticamente, utilize FragmentTransaction na sua activity:

val fragment = ExampleFragment()
val fragmentTransaction = supportFragmentManager.beginTransaction()

fragmentTransaction.add(R.id.fragment_container, fragment)
fragmentTransaction.commit()

Para uma gestão mais elegante, crie uma função para gerenciar transações:

package com.example.example

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.example.ExampleFragment
import com.example.example.Example2Fragment
import androidx.fragment.app.Fragment

public class MainActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    
    if (true) changeFragment(ExampleFragment())
    else changeFragment(Example2Fragment())
  }
  
  private fun changeFragment(fragment: Fragment) {
    val fragmentTransaction = supportFragmentManager.beginTransaction()
    fragmentTransaction.add(R.id.fragment_container, fragment)
    fragmentTransaction.commit()
  }
}

Os fragmentos são peças-chave para interfaces mais reutilizáveis e robustas no desenvolvimento Android. Experimente, aprimore suas habilidades e comece a construir interfaces dinâmicas! 🚀👩‍💻👨‍💻

Espero que este guia adicione uma dose de magia ao seu arsenal de desenvolvimento Android. Happy coding! 👩‍💻👨‍💻