📱 1.5 Hello World 2.0 com ViewBinding
🎯 Objetivo
Neste capítulo, evoluiremos nossa aplicação para interagir com o usuário, capturando um nome em uma caixa de texto e exibindo uma saudação personalizada. Introduziremos também o ViewBinding, o padrão moderno para acessar componentes visuais no Android.
🏗️ O Conceito: ViewBinding
Antigamente, usávamos o comando findViewById para ligar o XML ao código Java. No desenvolvimento moderno, usamos o ViewBinding, que gera automaticamente uma classe de ligação para cada arquivo de layout, evitando erros de “null pointer” e tornando o código mais limpo.
Habilitando o ViewBinding
No arquivo build.gradle (módulo app), adicione:
android {
...
buildFeatures {
viewBinding true
}
}💻 Mão na Massa
Passo 1: Definindo o Layout (activity_main.xml)
Vamos criar uma interface limpa com um campo de texto (EditText), um botão (Button) e um rótulo de resposta (TextView).
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:gravity="center_horizontal">
<TextView
style="@style/TextAppearance.Material3.TitleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Como você se chama?"
android:layout_marginBottom="16dp" />
<EditText
android:id="@+id/edit_nome"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Digite seu nome"
android:inputType="textPersonName" />
<Button
android:id="@+id/btn_saudar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Surpreenda-me"
android:layout_marginTop="16dp" />
<TextView
android:id="@+id/txt_resultado"
style="@style/TextAppearance.Material3.BodyLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:textColor="?attr/colorPrimary" />
</LinearLayout>Passo 2: Implementando a Lógica (MainActivity.java)
Agora, utilizaremos o objeto binding para acessar os componentes de forma tipada e segura.
package com.example.helloandroid;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.example.helloandroid.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
// Instância do binding que substitui todos os findViewByIDs
private ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 1. Infla o layout usando ViewBinding
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
// 2. Configura o clique do botão
binding.btnSaudar.setOnClickListener(v -> {
String nome = binding.editNome.getText().toString();
if (nome.isEmpty()) {
binding.editNome.setError("Por favor, digite seu nome");
} else {
exibirSaudacao(nome);
}
});
}
private void exibirSaudacao(String nome) {
String mensagem = getString(R.string.saudacao_personalizada, nome);
binding.txtResultado.setText(mensagem);
}
}✅ Resultado Esperado
Ao digitar seu nome e clicar no botão, a aplicação exibirá uma mensagem como: “Olá, [Seu Nome]! Bem-vindo ao Android Premium.”
Boas Práticas
Note que não usamos
android:onClickno XML. Prefira sempre configurar osetOnClickListenerno Java/Kotlin, pois facilita o teste unitário e evita acoplamento excessivo entre o layout e a lógica.
🚨 Erros Comuns
| Erro | Causa | Solução |
|---|---|---|
Cannot resolve symbol ActivityMainBinding | ViewBinding não habilitado no Gradle ou Sync pendente. | Habilite no build.gradle e clique em “Sync Now”. |
NullPointerException ao acessar le binding | Acessar o binding antes do onCreate. | Garante que binding = ActivityMainBinding.inflate(...) ocorra no topo do onCreate. |
🔗 Próximo Capítulo
Agora que você interage com a UI, vamos entender o Ciclo de Vida da Activity.