Apostila de Java Android
Apostila de Java Android
Java/Android
CUBATÃO
2021
Ana Gabriela Enes Rocha (448), Bruno Farias de Almeida (417), Caroline Batista
Pereira (418), Fabricia Maria Oliveira de Almeida (417), Marcus Vinicius da Silva
Souza (418), Rosangela dos Santos Silva (417), Yuri Santana Costa (418)
Java/Android
CUBATÃO
2021
SUMÁRIO
1. INTRODUÇÃO...................................................................................................... 4
2. HISTÓRICO E PRINCIPAIS CARACTERÍSTICAS DO JAVA.............................. 5
2.1. Por que a utilização da linguagem Java?....................................................... 6
2.2. Evolução do Sistema Android........................................................................ 7
3. OS 3 PRINCIPAIS IDE’S PARA DESENVOLVIMENTO JAVA/ANDROID.......... 13
3.1. Eclipse......................................................................................................................... 13
3.2. IntelliJ IDEA................................................................................................... 13
3.3. Netbeans....................................................................................................... 14
4. INSTALAÇÃO DO ANDROID STUDIO.............................................................. 15
4.1. Configurando o Android Studio..................................................................... 21
5. CONFIGURAÇÃO DO SDK (SOFTWARE DEVELOPMENT KIT)..................... 22
6. PERSONALIZAÇÃO DO ANDROID STUDIO.................................................... 30
7. PRIMEIRO PROGRAMA.................................................................................... 31
8. Criando um aplicativo que através de um botão exiba “Hello World”.................. 34
9. CRIANDO O EMULADOR.................................................................................. 37
10. APLICATIVO 01: CALCULAR CIRCUNFERÊNCIA.......................................... 43
11. APLICATIVO 02: MINHA LOCALIZAÇÃO COM GOOGLE MAPS................... 51
12. APLICATIVO 03: LISTA TELEFÔNICA............................................................. 58
13. APLICATIVO 04: CRUD COM FIREBASE......................................................... 69
14. REFERÊNCIAS................................................................................................... 92
INTRODUÇÃO
Os aplicativos fazem cada vez mais parte da rotina das pessoas. Eles podem ser
usados para diversas finalidades, como chamar um táxi, pedir uma refeição, baixar
músicas e assistir a vídeos. Sem dúvida, são uma ótima opção para tornar a vida mais
prática.
O Sistema Android foi desenvolvido por Andy Rubin, Rich Miner, Nick Sears e Chris
White, empresários já iniciados no ramo da tecnologia. E veio a surgir em 2003, na
cidade de Palo Alto na Califórnia.
Os criadores resolveram focar no mercado mobile, pois o mercado não era tão amplo
quanto gostariam para lançar um sistema inovador para câmeras digitais, o que era a
ideia original.
É importante mencionar que o Android sempre foi criticado por causa das brechas e
dos malwares. O problema é que os alvos são quase sempre aparelhos com versões
antigas do Android, que têm menos atualizações de segurança. E a facilidade de
submeter apps na Google Play é muito positiva para desenvolvedores, mas também
facilita muito a entrada de vírus.
O Android não começou bem como companhia e a empresa não conseguia levantar
dinheiro de investidores, além das operadoras que não queriam saber de um serviço
que poderia tirar o controle da indústria das mãos delas. E com isso, uma marca
interessada na aquisição foi a Google. Ele com uma incrível estratégia, ofereceu 10
milhões de dólares aos desenvolvedores que realizassem os melhores apps para
Android, partindo da primeira versão pública do Android SDK.
6
A 1.5 foi a primeira versão do Android com nome de doce: a Cupcake, que trouxe
suporte a outros teclados virtuais, gravação de vídeo e autorrotação de tela. O
robozinho verde símbolo da marca é um design original. Sendo a grande vantagem
do Android para manter essa marca, a democratização do smartphone. Cada nova
versão do Android é um doce ou sobremesa diferente e em ordem alfabética, aí
sempre fica aquela expectativa para saber qual é o próximo.
O Android Studio é baseado no IntelliJ IDEA, umas das ferramentas mais poderosas
de desenvolvimento Java, oferecendo muitos recursos que melhoram a produtividade
na criação de aplicativos para Android. Aliás, facilita muito a aprendizagem,
encaminhando xml com configurações e separado por pastas, visando o desempenho
do usuário que irá mexer no software.
11. Android 2/07/2020 Esta versão, assim como a anterior, foi uma
das únicas que não possuía o nome de algum
doce. O nome é “Android 11”.
Possui os seguintes atributos:
• Mensagens Prioritárias: Agora é
possível marcar como: “mensagem
prioritária” em contatos considerados
importantes para o usuário;
• Histórico de Notificações: Toda as
notificações podem ser descartadas,
inclusive as que estavam em
andamento;
• Gravação de Tela nativa: Um recurso
do iOS que agora chegou para todos
celulares com o Android 11.
13
Eclipse
Eclipse, IDE criado pela empresa IBM, para desenvolvimento em Java, suporta
diversas linguagens apenas com a instalação de plugins (C/C++, PHP, Python, Kotlin,
entre outras), por meio dessas instalações o desenvolvedor incrementa as
funcionalidades do Eclipse.
IntelliJ IDEA
Lançada em 2008 pela empresa JetBrains, a IntelliJ IDEA fez sucesso entre
programadores desde então. Logo na versão inicial, a aplicação já oferecia recursos
importantes, tais como: Suporte a SQL, Java, framework Seam e WebServices
RESTful.
Netbeans
Está opção é para perguntar se você gostaria que o Android Studio envie estatística
para o Google.
22
O que é SDK?
O HAXM é uma ferramenta exclusiva dos processadores Intel, que serve para
aumentar a velocidade operacional do emulador do Android, portanto é recomendável
prosseguir com essa opção selecionada desde que possua um processador desta
linha
24
Caso seu processador tenha pouca memória ao baixar o HAXM, priorize definir entre
2GB a 1 GB.
25
No meu caso não é possível instalar o HAXM, visto que meu processador é AMD.
Não é indicado utilizar a versão mais recente do Android em razão desta versão
apresentar possíveis avarias e/ou incompatibilidades.
27
Caso não tenha instalado o HAXM no instante da instalação, apenas eleja a opção
“Intel x86 Emulator Accelerator (HAXM Installer)”
29
Podendo
aparecer
Preferences
31
Primeiro programa
32
Para que eles fiquem na posição preterida quando executado, deve-se clicar sobre a
varinha com uns efeitos em azul destacado em vermelho, conforme imagem abaixo.
Já para definir o que será exibido na TextView, vá em Attributes>Common
Attrinutes>Text e digite o que deseja exibir (está grifado em laranja na imagem).
Dentro do Método, foi criado uma ação para o botão colocado na interface do nosso
App, chamada “escrever” que irá mudar o texto para “Hello World”.
Criando o emulador
O que é virtualização?
Caso tenha o HAXM, pode-se usar o x86 Images (e é o mais indicado), caso não
tenha, como foi o meu caso, use “other images”. Ao escolher o Android que irá
utilizar, clique em “Download”, aguarde o tempo de carregamento;
41
No terceiro passo, como indicado pela seta vermelha, araste o objeto desejado até a
tela do app para adicioná-lo ao projeto, este objeto servirá para a entrada do valor
do Raio que permitirá calcular o perímetro e a área.
Quarto passo. A seta laranja indica a “left constraint”, se arrastar esta bolinha ao
outro textview criará uma constraint, ou seja, um alinhamento entre os dois objetos.
1. Crie um projeto com Google Maps Activity. Nele já estará implementado a API do
Google MAPS
4. Com tudo devidamente configurado, enfim a Activity do Google Maps poderá ser
modificada. Para tanto, abra o “MapsActivity”, que está dentro do pacote do seu
programa – no caso do exemplo, “com.example.minhalocalizacao”.
5. Note que há um objeto mMap que é instância da classe GoogleMap. É ele quem
possui os atributos do nosso mapa e será utilizado para configurar as nossas
preferências.
6. No método onMapReady() está predefinido que logo após a aplicação iniciar será
definido um novo marcador e a câmera moverá para a Austrália, com coordenadas
em Sydney. Tais códigos não serão úteis para a nossa aplicação e podem ser
removidos.
53
mMap.setMyLocationEnabled(true);
Observe que ocorrerá um erro, pois para ativar o botão “Minha Localização” é
preciso ser garantido que o usuário tenha dado permissão para que seus dados
geográficos sejam acessados pela aplicação. Então, com o cursor do mouse
sobre a linha pressione Alt + Shift + Enter para que automaticamente seja gerada
a estrutura de checagem, resultando em:
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[]
permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the
documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
mMap.setMyLocationEnabled(true);
O if verifica se o dispositivo não tem as permissões necessárias. Se for esse o
caso, então a permissão deverá ser requisitada. Para isso, substituímos as linhas
de comentário com:
54
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
8. Entretanto, mesmo que o usuário aceite a requisição, o botão será ativado apenas
ao reabrir a aplicação. Desse modo, podemos utilizar o método
onRequestPermissionsResult() para que o botão seja habilitado logo ao aceitar a
permissão (digite o nome do método e pressione Enter ou Tab para cria-lo
55
11. Por fim, vamos programar para que ao clicar no botão “Minha Localização”
apareça a latitude e longitude do local do usuário dentro de uma janela de
mensagem da classe Toast:
mMap.clear();
lat = String.valueOf(mMap.getMyLocation().getLatitude());
lng = String.valueOf(mMap.getMyLocation().getLongitude());
info = "Latitude: " + lat + "\nLongitude: " + lng;
marker.position(new LatLng(Double.parseDouble(lat),
Double.parseDouble(lng)))
.title("Você está aqui!");
mMap.addMarker(marker);
return false;
}
Onde:
57
3 Iremos utilizar um EditText para o usuário entrar com os dados que deseja filtrar
e um ListView para exibir os contatos da lista telefônica.
4 Criaremos as entidades Dados Contatos e Telefone, que irá armazenar as
informações como id, nome e Telefone.
package com.tccjavaandroid.listatelefonica;
import java.util.List;
return Nome;
}
package com.tccjavaandroid.listatelefonica;
}
61
package com.tccjavaandroid.listatelefonica;
import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.widget.EditText;
import java.util.ArrayList;
import java.util.List;
C_Contatos.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
int IndexName =
C_Contatos.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
if (Contato.getNome().contains(pesquisa))
Contatos.add(Contato);
}
C_Contatos.close();
return Contatos;
}
}
7 package com.tccjavaandroid.listatelefonica;
import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract;
import java.util.ArrayList;
import java.util.List;
int IndexTelefone;
List Telefones = new ArrayList();
while(C_Telefones.moveToNext())
{
DadosContatosTelefone Telefone = new DadosContatosTelefone();
IndexTelefone =
C_Telefones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.N
UMBER);
Telefone.setTelefone(C_Telefones.getString(IndexTelefone));
Telefones.add(Telefone);
}
C_Telefones.close();
return Telefones;
}
}
7. Para ler os contatos da lista telefônica e escrever em uma List view utiliza se o
código abaixo.
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.READ_CONTACTS) !=
PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this,
Manifest.permission.WRITE_CONTACTS) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.WRITE_CONTACTS,
Manifest.permission.READ_CONTACTS}, 1);
return;
}
final ListView listaPessoas = (ListView) findViewById(R.id.ListaContatosTelefonicos);
8. O código abaixo tem como função filtrar os dados conforme o que o usuário
escrever no EditTextP.
((EditText)findViewById(R.id.EditTextP)).setOnEditorActionListener(
new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH ||
actionId == EditorInfo.IME_ACTION_DONE ||
event != null &&
event.getAction() == KeyEvent.ACTION_DOWN &&
event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
if (event == null || !event.isShiftPressed()) {
ListaContatos[0] =
Contato.getContatos(EditTextP.getText().toString());
package com.tccjavaandroid.listatelefonica;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import java.security.spec.ECParameterSpec;
import java.util.ArrayList;
import java.util.List;
EditText EditTextP;
@Override
protected void onCreate(Bundle savedInstanceState) {
67
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditTextP = findViewById(R.id.EditTextP);
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.READ_CONTACTS) !=
PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this,
Manifest.permission.WRITE_CONTACTS) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.WRITE_CONTACTS,
Manifest.permission.READ_CONTACTS}, 1);
return;
}
final ListView listaPessoas = (ListView)
findViewById(R.id.ListaContatosTelefonicos);
((EditText)findViewById(R.id.EditTextP)).setOnEditorActionListener(
new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
if (actionId == EditorInfo.IME_ACTION_SEARCH ||
actionId == EditorInfo.IME_ACTION_DONE ||
event != null &&
event.getAction() == KeyEvent.ACTION_DOWN &&
event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
68
2- Acesse o site do Firebase e entre em uma conta Google. Clique em “Ir para o
console” e crie um novo projeto. Nessa aplicação não será necessário ativar o
recurso do Google Analytics.
buildscript {
repositories {
// Verifique se tem essa linha (se não, adicione-a):
google() // Repositório Maven do Google
}
dependencies {
71
...
// Insira esta linha
classpath 'com.google.gms:google-services:4.3.4'
}
}
allprojects {
...
repositories {
// Verifique se tem essa linha (se não, adicione-a):
google() // Repositório Maven do Google
...
}
}
dependencies {
// Importe o Firebase BoM
implementation platform('com.google.firebase:firebase-bom:26.2.0')
9- Partindo para o design da aplicação, serão usadas três caixas de textos com
hints dos nomes dos atributos da mercadoria (nome do produto, quantidade e
valor) a ser manipulada. Também conterá uma List View para visualizar a lista
de produtos registrados. Para facilitar, será utilizado um layout linear de
orientação vertical.
• Começando pela alteração do layout, vá na activity_main.xml (app > res >
layout) e substitua “androidx.constraintlayout.widget.ConstraintLayout” por
“LinearLayout”;
• Insira, dentro da tag do LinearLayout, “android:orientation=’vertical’”;
• Apague o TextView “Hello World!”;
• Implemente um objeto Plain Text para o nome do produto e um Number para
quantidade e o último Number (decimal) para o atributo valor. Para ficar mais
agradável, os campos quantidade e valor podem ficar dentro de um Linear
layout horizontal e pode ser inserido um Text View com texto de “R$” à frente
do campo do valor;
• Por fim, adicione um List View.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
73
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="18dp"
tools:context=".MainActivity">
<EditText
android:id="@+id/editProduto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Nome do Produto"
android:inputType="textPersonName" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="68dp"
android:orientation="horizontal">
<EditText
android:id="@+id/editQtd"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Quantidade"
android:inputType="number" />
<TextView
android:id="@+id/txtCambio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:text="R$"
74
android:textSize="18sp" />
<EditText
android:id="@+id/editValor"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Valor"
android:inputType="numberDecimal" />
</LinearLayout>
<ListView
android:id="@+id/listV_produtos"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
10- Concluindo a parte de design, será feito um menu com botões para registrar
novos produtos, atualizar dados de mercadorias já existentes e deletar
produtos.
• Primeiro serão selecionados os ícones dos botões:
75
Agora serão implementados os itens (botões) no menu. Para tanto, basta inserir
na aba design três objetos de itens de menu e configurar seus atributos para
aparecerem como ícones. O menu_main.xml deverá ficar parecido com:
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_add"
android:icon="@drawable/ic_add"
android:title="Adicionar"
app:showAsAction="always" />
<item
android:id="@+id/menu_save"
android:icon="@drawable/ic_save"
android:title="Salvar alterações"
app:showAsAction="always" />
<item
android:id="@+id/menu_delete"
android:icon="@drawable/ic_delete"
android:title="Deletar"
78
app:showAsAction="ifRoom" />
</menu>
12- A classe EstoqueDAL conterá apenas um método para fazer a conexão com o
banco de dados Firebase:
return firebaseDatabase.getReference();
}
Onde:
• FirebaseApp é o ponto de entrada dos SDKs do Firebase. Assim, ao usar o
initializeApp() é inicializada a instância FirebaseApp padrão usando valores de
recurso de string – preenchidos em google-services.json;
79
Erro.setErro(false);
14- Agora será feita a conexão com o banco de dados. Para isso, primeiro serão
construídos objetos da FirebaseDatabase e DatabaseReference na
MainActivity:
public class MainActivity extends AppCompatActivity {
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
...
}
Em seguida será usado o EstoqueBLL.inicializarFirebase() no onCreate() da Main
Activity:
81
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
databaseReference = EstoqueBLL.inicializarFirebase(MainActivity.this,
firebaseDatabase);
}
O databaseReference é o ponto de partida para todas as operações do banco de
dados.
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
databaseReference = EstoqueBLL.inicializarFirebase(MainActivity.this,
firebaseDatabase);
...
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
@Override
public void onClick(DialogInterface dialog, int which) {
// Apenas para fechar o dialog
}
});
switch (id) {
case R.id.menu_add: {
m.setId(UUID.randomUUID().toString());
m.setProduto(edtProduto.getText().toString().trim());
m.setQtd(edtQtd.getText().toString().trim());
m.setValor(edtValor.getText().toString().trim());
EstoqueBLL.validaDados(m);
if (Erro.getErro()) {
builder.setMessage(Erro.getMsg()).setTitle("ERRO!");
builder.create().show();
} else {
databaseReference.child("Mercadoria").child(m.getId()).setValue(m);
EstoqueBLL.limparCampos(edtProduto, edtQtd, edtValor);
}
return true;
}
default:
return super.onOptionsItemSelected(item);
}
}
Onde:
▪ onOptionsItemSelected é booleano e quando processar um item
corretamente deve retornar true. Caso não processe o item de menu,
deve-se chamar a sua implementação de superclasse (a implementação
padrão retornará falso);
84
Mercadoria mSelecionada;
• Para que seja implementada na List View todas as alterações feitas no banco
de dados será necessário adicionar um EventListener à tabela Mercadoria:
private void eventoDatabase() {
databaseReference.child("Mercadoria").addValueEventListener(new
ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
listMercadoria.clear();
for (DataSnapshot objSnapshot: snapshot.getChildren()) {
Mercadoria m = objSnapshot.getValue(Mercadoria.class);
listMercadoria.add(m);
}
arrayAdapterMercadoria = new ArrayAdapter(MainActivity.this,
android.R.layout.simple_list_item_1, listMercadoria);
listV_produtos.setAdapter(arrayAdapterMercadoria);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
86
}
});
}
Onde:
...
switch (id) {
case R.id.menu_add: {...}
case R.id.menu_save: {
try {
m.setId(mSelecionada.getId());
m.setProduto(edtProduto.getText().toString().trim());
m.setQtd(edtQtd.getText().toString().trim());
m.setValor(edtValor.getText().toString().trim());
EstoqueBLL.validaDados(m);
if (Erro.getErro()) {
builder.setMessage(Erro.getMsg()).setTitle("ERRO!");
builder.create().show();
} else {
databaseReference.child("Mercadoria").child(m.getId())
.setValue(m);
EstoqueBLL.limparCampos(edtProduto, edtQtd, edtValor);
}
} catch (Exception e) {
builder.setMessage("Selecione um produto!").setTitle("ERRO!");
builder.create().show();
}
return true;
88
}
default:
return super.onOptionsItemSelected(item);
}
}
Observe que é utilizado um try-catch para garantir que o usuário tenha selecionado
alguma mercadoria.
...
switch (id) {
case R.id.menu_add: {...}
case R.id.menu_save: {...}
case R.id.menu_delete: {
try {
EstoqueBLL.validaDados(mSelecionada);
mSelecionada.getId();
@Override
public void onClick(DialogInterface dialog, int which) {
// apenas para fechar o dialog
}
}).setPositiveButton("Sim", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
m.setId(mSelecionada.getId());
databaseReference.child("Mercadoria").child(m.getId()).removeValue();
EstoqueBLL.limparCampos(edtProduto, edtQtd, edtValor,
mSelecionada);
}
}).create().show();
} catch (Exception e) {
builder.setMessage("Selecione um produto!").setTitle("ERRO!");
builder.create().show();
}
return true;
}
default:
return super.onOptionsItemSelected(item);
}
}
Obviamente, nesse botão são apenas recuperados os valores da
mSelecionada. Em seguida, ao invés de ser usado setValue() no
databaseReference, é utilizado removeValue() para apagar os dados.
...
try {
mSelecionada.setId(null);
} catch (Exception e) {
/* Se cair aqui significa que o objeto pessoaSelecionada sequer foi
instanciado e então
não é preciso fazer nada */
}
}
Dessa forma, o id da mSelecionada será limpo. Entretanto, deve-se também
adicionar uma condição no método validaDados() para verificar se o id a ser
selecionado será valido. Desse modo, basta acrescentar:
Erro.setErro(false);
Referências
SCHUMAN, Deivis. “Você conhece a história do Android? Confira aqui toda sua
trajetória”. Disponível em: < https://www.nextpit.com.br/historia-do-android >. Acesso
em: 15 de setembro de 2020.
HIGA, Paulo. “As melhores novidades do Android 8.0 Oreo”. Disponível em:
<https://tecnoblog.net/211151/android-8-o-novidades-
recursos/#:~:text=Nova%20vers%C3%A3o%20do%20Android%20tem,seguran%C3
93
%A7a%2C%20notifica%C3%A7%C3%B5es%2C%20%C3%A1udio%20e%20mais
HYPERLINK "https://tecnoblog.net/211151/android-8-o-novidades-recursos/"&
HYPERLINK "https://tecnoblog.net/211151/android-8-o-novidades-
recursos/"text=O%20Google%20lan%C3%A7ou%20o%20Android,uma%20s%C3%
A9rie%20de%20refinamentos%20internos.>. Acesso em: 18 de setembro de 2020.