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! 👩💻👨💻