Prévia do material em texto
UNIVERSIDADE VEIGA DE ALMEIDA
SISTEMAS DE INFORMAÇÃO
Programação Para Dispositivos Móveis
AVA2
Professor Thiago Alberto Ramos Gabriel
Aluna: Elen Pires de Araújo
Mat.: 20203301257
Nova Iguaçu
Setembro de 2021
ENUNCIADO
Crie um aplicativo Android para trabalhar com uma base de dados com uma tabela
para persistência de dados de um objeto escolhido por você.
O objeto deve ser definido por meio de uma classe própria, com:
● O mínimo de cinco atributos (com uso de três diferentes tipos de dados)
mais o atributo id (long).
● Pelo menos um método construtor.
● Métodos de acesso (setters & getters) para todos os atributos.
● Outros métodos que sejam necessários.
A aplicação deverá tratar a inclusão, alteração e exclusão dos registros, além de
tratar o acesso, abertura e fechamento do recurso do banco de dados do SQLite,
com o uso da arquitetura em três camadas.
O aplicativo deverá apresentar os dados dos objetos armazenados por meio de uma
lista (ListView) e apresentar as funcionalidades de inclusão, exclusão e alteração,
que podem ser realizadas de acordo com a sua escolha.
INTRODUÇÃO
O projeto Cadastro de Animais é funcional, como mostrado no vídeo disponível no
link: https://youtu.be/skX2mGYaDB0 . O código completo está disponível no Github,
link do repositório: https://github.com/elenaraujo/mobile-crud .
Para facilitar a correção disponibilizei cada arquivo .java e .xml do projeto no Gist,
seguem os links:
Activity principal da lista de animais:
ListarAnimaisActivity.java
activity_listar_animais.xml
Activity de cadastro (criação/atualização) de animais:
CadastroAnimalActivity.java
activity_cadastro_animal.xml
Modelo Animal, DAO file e arquivo de conexão com o banco:
Animal.java
AnimalDAO.java
Conexao.java
Adaptador para exibir os dados da lista de forma customizada para esta
aplicação, com nome, espécie, idade, raça e peso de cada animal:
AnimalAdapter.java
item.xml
Menu com as opções “Cadastro” (ícone de “+” verde) e “Consulta” (ícone de
lupa):
menu_principal.xml
Menu com as opções “Excluir” e “Atualizar” para cada item da listagem:
menu_contexto.xml
https://youtu.be/skX2mGYaDB0
https://github.com/elenaraujo/mobile-crud
https://gist.github.com/elenaraujo/f82a664a6817ba66bfb683a397f4bcbc
https://gist.github.com/elenaraujo/efbc094db79830b470f17a54460d06a6
https://gist.github.com/elenaraujo/d70ddae81f15b8e5cc24ad6faaaa473e
https://gist.github.com/e249b3630a923b529350e5605a70df43
https://gist.github.com/beda57371f300e244706fab1fbe86e60
https://gist.github.com/614b7de968f401ee25a1a78435dab32d
https://gist.github.com/00d428238ebf6f378fc01a9c3e4bfb28
https://gist.github.com/3779a285bf4ce40a2a6447384b905c8a
https://gist.github.com/b19ca8e1892ab3c7cc7284559152e27b
https://gist.github.com/771b327a78e8fa1c26d8fff3b4242bde
https://gist.github.com/94cfbf77e4ccbd955c9146a097de5c25
PRINTS DE TELA
CÓDIGO
ListarAnimaisActivity.java
package com.example.cadastroanimal ;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SearchView;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
// Activity Principal, que é exibida ao abrir o App.
// Mostra uma listagem com os itens cadastrados
public class ListarAnimaisActivity extends AppCompatActivity {
private ListView listView;
private AnimalDAO dao;
private List <Animal> animais;
private List <Animal> animaisFiltrados = new ArrayList <>();
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate (savedInstanceState);
setContentView (R.layout.activity_listar_animais);
listView = findViewById ((R.id.lista_animais));
dao = new AnimalDAO ( this );
dao. open ();
animais = dao. obterTodos ();
animaisFiltrados. addAll (animais);
AnimalAdapter adaptador = new AnimalAdapter ( this ,
animaisFiltrados);
listView. setAdapter ((adaptador));
registerForContextMenu (listView);
dao. close ();
}
public boolean onCreateOptionsMenu ( Menu menu ) {
MenuInflater i = getMenuInflater ();
i. inflate (R.menu.menu_principal, menu);
SearchView sv = (SearchView)
menu. findItem (R.id.app_bar_search). getActionView ();
sv. setOnQueryTextListener ( new SearchView. OnQueryTextListener ()
{
@ Override
public boolean onQueryTextSubmit ( String s) {
return false ;
}
@ Override
public boolean onQueryTextChange ( String s) {
procuraAnimal (s);
return false ;
}
});
return true ;
}
public void onCreateContextMenu ( ContextMenu menu , View v ,
ContextMenu . ContextMenuInfo menuInfo ) {
super . onCreateContextMenu (menu, v, menuInfo);
MenuInflater i = getMenuInflater ();
i. inflate (R.menu.menu_contexto, menu);
}
// Método de busca pelo nome do animal, ao clicar no ícone de lupa
public void procuraAnimal ( String nome ) {
animaisFiltrados. clear ();
for ( Animal a : animais) {
if (a. getNome (). toLowerCase (). contains (nome. toLowerCase ()))
{
animaisFiltrados. add (a);
}
}
listView. invalidateViews ();
}
// Método de exclusão do animal. O botão de exclusão aparece ao
pressionar em cima de cada
// objeto da lista.
public void excluir ( MenuItem item ) {
AdapterView . AdapterContextMenuInfo menuInfo =
(AdapterView.AdapterContextMenuInfo)item. getMenuInfo ();
final Animal animalExcluir =
animaisFiltrados. get (menuInfo.position);
AlertDialog dialog = new AlertDialog. Builder ( this )
. setTitle ( " Atenção " )
. setMessage ( " Realmente deseja excluir o animal? " )
. setNegativeButton ( " Não " , null )
. setPositiveButton ( " Sim " , new
DialogInterface. OnClickListener () {
@ Override
public void onClick ( DialogInterface dialogInterface,
int i) {
animaisFiltrados. remove ((animalExcluir));
animais. remove (animalExcluir);
dao. open ();
dao. excluir (animalExcluir);
dao. close ();
listView. invalidateViews ();
}
}). create ();
dialog. show ();
}
// Método que executa a Activity CadastroAnimal, para que o usuário
possa preencher os dados
// de um novo animal a ser registrado
public void cadastrar ( MenuItem item ) {
Intent it = new Intent ( this , CadastroAnimalActivity.class);
startActivity (it);
}
// Método que é executado ao pressionar em cima de um item da lista
e clicar na opção Atualizar.
// Os dados desse item que foi pressionado são passados para a
activity CadastrarAnimal,
// sendo possível atualizar os dados desse animal baseado no ID.
public void atualizar ( MenuItem item ) {
AdapterView . AdapterContextMenuInfo menuInfo =
(AdapterView.AdapterContextMenuInfo)
item. getMenuInfo ();
final Animal animalAtualizar =
animaisFiltrados. get (menuInfo.position);
Intent it = new Intent ( this , CadastroAnimalActivity.class);
it. putExtra ( " animal " , animalAtualizar);
startActivity (it);
}
@ Override
public void onResume () {
super . onResume ();
dao. open ();
animais = dao. obterTodos ();
dao. close ();
animaisFiltrados. clear ();
animaisFiltrados. addAll (animais);
listView. invalidateViews ();
}
}
activity_listar_animais.xml
<? xml version = " 1.0 " encoding = " utf-8 " ?>
< androidx.constraintlayout.widget.ConstraintLayout
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 "
android : layout_height = " match_parent "
tools : context = " .ListarAnimaisActivity " >
< ListView
android : id = " @+id/lista_animais "
android : layout_width = " 0dp "
android : layout_height = " 0dp "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : layout_marginEnd = " 8dp "
android : layout_marginBottom = " 8dp "
app : layout_constraintBottom_toBottomOf = " parent "
app : layout_constraintEnd_toEndOf = " parent "
app : layout_constraintStart_toStartOf = " parent "
app : layout_constraintTop_toTopOf = " parent " />
</ androidx.constraintlayout.widget.ConstraintLayout >
CadastroAnimalActivity.java
package com.example.cadastroanimal ;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
// Activity retornada ao clicar em atualizar os dados de um animal ou
ao clicar no ícone de "+"
// no menu superior, para cadastrar um novo animal.
public class CadastroAnimalActivity extends AppCompatActivity {
private EditText especie, raca, nome, peso, idade;
private AnimalDAO dao;
private Animal animal = null ;
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate (savedInstanceState);
setContentView (R.layout.activity_cadastro_animal);
especie = findViewById (R.id.editEspecie);
raca = findViewById (R.id.editRaca);
nome = findViewById (R.id.editNome);
peso = findViewById (R.id.editPeso);
idade = findViewById (R.id.editIdade);
dao = new AnimalDAO ( this );
Intent it = getIntent ();
if (it. hasExtra ( " animal " )) {
animal = (Animal) it. getSerializableExtra ( " animal " );
especie. setText (animal. getEspecie ());
raca. setText (animal. getRaca ());
nome. setText (animal. getNome ());
peso. setText (animal. getPeso (). toString ());
idade. setText (animal. getIdade (). toString ());
}
}
// Método que é chamado ao clicar no botão "Salvar" na tela após o
preenchimento dos dados
// do novo animal ou atualização de dados de um animal existente.
Este método verifica qual
// desses casos é o atual e faz a ação de inserir ou atualizar no
banco conforme a condição.
public void salvar ( View view ) {
if (animal == null ) {
animal = new Animal ();
animal. setEspecie (especie. getText (). toString ());
animal. setRaca (raca. getText (). toString ());
animal. setNome (nome. getText (). toString ());
animal. setPeso (Float. parseFloat (peso. getText (). toString ()));
animal. setIdade (Short. parseShort (idade. getText (). toString ()));
dao. open ();
long id = dao. inserir (animal);
dao. close ();
Toast. makeText ( this , " Animal inserido com o id: " + id,
Toast.LENGTH_SHORT). show ();
} else {
animal. setEspecie (especie. getText (). toString ());
animal. setRaca (raca. getText (). toString ());
animal. setNome (nome. getText (). toString ());
animal. setPeso (Float. parseFloat (peso. getText (). toString ()));
animal. setIdade (Short. parseShort (idade. getText (). toString ()));
dao. open ();
dao. atualizar (animal);
dao. close ();
Toast. makeText ( this , " Cadastro do animal atualizado " ,
Toast.LENGTH_SHORT). show ();
}
}
}
activity_cadastro_animal.xml
<? xml version = " 1.0 " encoding = " utf-8 " ?>
< androidx.constraintlayout.widget.ConstraintLayout
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 "
android : layout_height = " match_parent "
tools : context = " .CadastroAnimalActivity " >
< TextView
android : id = " @+id/textEspecie "
android : layout_width = " 0dp "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : layout_marginEnd = " 8dp "
android : text = " Espécie "
app : layout_constraintEnd_toEndOf = " parent "
app : layout_constraintStart_toStartOf = " parent "
app : layout_constraintTop_toTopOf = " parent " />
< EditText
android : id = " @+id/editEspecie "
android : layout_width = " 0dp "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : layout_marginEnd = " 8dp "
android : ems = " 10 "
android : inputType = " textPersonName "
app : layout_constraintEnd_toEndOf = " parent "
app : layout_constraintStart_toStartOf = " parent "
app : layout_constraintTop_toBottomOf = " @+id/textEspecie " />
< TextView
android : id = " @+id/textRaca "
android : layout_width = " 0dp "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : layout_marginEnd = " 8dp "
android : text = " Raça "
app : layout_constraintEnd_toEndOf = " parent "
app : layout_constraintStart_toStartOf = " parent "
app : layout_constraintTop_toBottomOf = " @+id/editEspecie " />
< EditText
android : id = " @+id/editRaca "
android : layout_width = " 0dp "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : layout_marginEnd = " 8dp "
android : ems = " 10 "
android : inputType = " textPersonName "
app : layout_constraintEnd_toEndOf = " parent "
app : layout_constraintStart_toStartOf = " parent "
app : layout_constraintTop_toBottomOf = " @+id/textRaca " />
< TextView
android : id = " @+id/textNome "
android : layout_width = " 0dp "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : layout_marginEnd = " 8dp "
android : text = " Nome "
app : layout_constraintEnd_toEndOf = " parent "
app : layout_constraintStart_toStartOf = " parent "
app : layout_constraintTop_toBottomOf = " @+id/editRaca " />
< EditText
android : id = " @+id/editNome "
android : layout_width = " 0dp "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : layout_marginEnd = " 8dp "
android : ems = " 10 "
android : inputType = " textPersonName "
app : layout_constraintEnd_toEndOf = " parent "
app : layout_constraintStart_toStartOf = " parent "
app : layout_constraintTop_toBottomOf = " @+id/textNome " />
< TextView
android : id = " @+id/textPeso "
android : layout_width = " 0dp "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : layout_marginEnd = " 8dp "
android : text = " Peso "
app : layout_constraintEnd_toEndOf = " parent "
app : layout_constraintStart_toStartOf = " parent "
app : layout_constraintTop_toBottomOf = " @+id/editNome " />
< EditText
android : id = " @+id/editPeso "
android : layout_width = " 0dp "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : layout_marginEnd = " 8dp "
android : ems = " 10 "
android : inputType = " textPersonName "
app : layout_constraintEnd_toEndOf = " parent "
app : layout_constraintStart_toStartOf = " parent "
app : layout_constraintTop_toBottomOf = " @+id/textPeso " />
< TextView
android : id = " @+id/textIdade "
android : layout_width = " 0dp "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : layout_marginEnd = " 8dp "
android : text = " Idade "
app : layout_constraintEnd_toEndOf = " parent "
app : layout_constraintStart_toStartOf = " parent "
app : layout_constraintTop_toBottomOf = " @+id/editPeso " />
< EditText
android : id = " @+id/editIdade "
android : layout_width = " 0dp "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : layout_marginEnd = " 8dp "
android : ems = " 10 "
android : inputType = " textPersonName "
app : layout_constraintEnd_toEndOf = " parent "
app : layout_constraintStart_toStartOf = " parent "
app : layout_constraintTop_toBottomOf = " @+id/textIdade " />
< Button
android : id = " @+id/buttonSalvar "
android : layout_width = " 0dp "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginEnd = " 8dp "
android : layout_marginBottom = " 8dp "
android : onClick = " salvar "
android : text = " Salvar "
app : layout_constraintBottom_toBottomOf = " parent "
app : layout_constraintEnd_toEndOf = " parent "
app : layout_constraintStart_toStartOf = " parent " />
</ androidx.constraintlayout.widget.ConstraintLayout >
Animal.java
package com.example.cadastroanimal ;
import java.io.Serializable;
// Classe modelo da entidade Animal, com seus respectivos métodos
getters e setters
public class Animal implements Serializable {
private Long id;
private String especie, raca, nome;
private Float peso;
private Short idade;
public Long getId () {
return id;
}
public void setId ( Long id ) {
this .id = id;
}
public String getEspecie () {
return especie;
}
public void setEspecie ( String especie ) {
this .especie = especie;
}
public String getRaca () {
return raca;
}
public void setRaca ( String raca ) {
this .raca = raca;
}
public String getNome () {return nome;
}
public void setNome ( String nome ) {
this .nome = nome;
}
public Float getPeso () {
return peso;
}
public void setPeso ( Float peso ) {
this .peso = peso;
}
public Short getIdade () {
return idade;
}
public void setIdade ( Short idade ) {
this .idade = idade;
}
}
AnimalDAO.java
package com.example.cadastroanimal ;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
// Arquivo com os métodos de criação (inserir()), leitura
(obterTodos()), atualização (atualizar())
// e deleção (excluir()) dos dados no banco de dados.
public class AnimalDAO {
private Conexao conexao;
private SQLiteDatabase banco;
public AnimalDAO ( Context context ) {
conexao = new Conexao (context);
}
public void open () throws SQLException {
banco = conexao. getWritableDatabase ();
}
public void close () {
conexao. close ();
}
public long inserir ( Animal animal ) {
ContentValues values = new ContentValues ();
values. put ( " especie " , animal. getEspecie ());
values. put ( " raca " , animal. getRaca ());
values. put ( " nome " , animal. getNome ());
values. put ( " peso " , animal. getPeso ());
values. put ( " idade " , animal. getIdade ());
return banco. insert ( " animal " , null , values);
}
public List <Animal> obterTodos () {
List <Animal> animais = new ArrayList <>();
Cursor cursor = banco. query ( " animal " , new String []{ " id " ,
" especie " , " raca " , " nome " , " peso " , " idade " },
null , null , null , null , null );
while (cursor. moveToNext ()) {
Animal animal = new Animal ();
animal. setId (cursor. getLong ( 0 ));
animal. setEspecie (cursor. getString ( 1 ));
animal. setRaca (cursor. getString ( 2 ));
animal. setNome (cursor. getString ( 3 ));
animal. setPeso (cursor. getFloat ( 4 ));
animal. setIdade (cursor. getShort ( 5 ));
animais. add (animal);
}
cursor. close ();
return animais;
}
public void excluir ( Animal animal ) {
banco. delete ( " animal " , " id = ? " , new
String []{animal. getId (). toString ()});
}
public void atualizar ( Animal animal ) {
ContentValues values = new ContentValues ();
values. put ( " especie " , animal. getEspecie ());
values. put ( " raca " , animal. getRaca ());
values. put ( " nome " , animal. getNome ());
values. put ( " peso " , animal. getPeso ());
values. put ( " idade " , animal. getIdade ());
banco. update ( " animal " , values,
" id = ? " , new String []{animal. getId (). toString ()});
}
}
Conexao.java
package com.example.cadastroanimal ;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
// Arquivo que cria conexão com o banco de dados SQLite
public class Conexao extends SQLiteOpenHelper {
private static final String name = " banco.db " ;
private static final int version = 1 ;
public Conexao ( Context context ) {
super (context, name, null , version);
}
@ Override
public void onCreate ( SQLiteDatabase db ) {
db. execSQL ( " create table animal(id integer primary key
autoincrement, " +
" especie varchar(20), raca varchar(30), nome
varchar(50), peso decimal(5), idade integer(2)) " );
}
@ Override
public void onUpgrade ( SQLiteDatabase sqLiteDatabase , int i , int i1 )
{}
}
AnimalAdapter.java
package com.example.cadastroanimal ;
import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.List;
// Adaptador para exibir os dados da listagem de forma customizada para
esta aplicação,
// com nome, espécie, idade, raça e peso de cada animal.
public class AnimalAdapter extends BaseAdapter {
private List <Animal> animais;
private Activity activity;
public AnimalAdapter ( Activity activity , List <Animal> animais ) {
this .activity = activity;
this .animais = animais;
}
@ Override
public int getCount () {
return animais. size ();
}
@ Override
public Object getItem ( int i ) {
return animais. get (i);
}
@ Override
public long getItemId ( int i ) {
return animais. get (i). getId ();
}
@ Override
public View getView ( int i , View view , ViewGroup viewGroup ) {
View v = activity. getLayoutInflater (). inflate (R.layout.item,
viewGroup, false );
TextView especie = v. findViewById (R.id.txtEspecie);
TextView raca = v. findViewById (R.id.txtRaca);
TextView nome = v. findViewById (R.id.txtNome);
TextView peso = v. findViewById (R.id.txtPeso);
TextView idade = v. findViewById (R.id.txtIdade);
Animal animal = animais. get (i);
especie. setText (animal. getEspecie ());
raca. setText (animal. getRaca ());
nome. setText (animal. getNome ());
peso. setText (animal. getPeso (). toString ());
idade. setText (animal. getIdade (). toString ());
return v;
}
}
item.xml
<? xml version = " 1.0 " encoding = " utf-8 " ?>
< androidx.constraintlayout.widget.ConstraintLayout
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 "
android : layout_height = " match_parent " >
< TextView
android : id = " @+id/txtNome "
android : layout_width = " 0dp "
android : layout_height = " wrap_content"
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : layout_marginEnd = " 8dp "
android : text = " TextView "
android : textColor = " #673AB7 "
android : textSize = " 18sp "
android : textStyle = " bold "
app : layout_constraintEnd_toEndOf = " parent "
app : layout_constraintStart_toStartOf = " parent "
app : layout_constraintTop_toTopOf = " parent " />
< TextView
android : id = " @+id/textView2 "
android : layout_width = " wrap_content "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : text = " Espécie: "
android : textStyle = " bold "
app : layout_constraintStart_toStartOf = " parent "
app : layout_constraintTop_toBottomOf = " @+id/txtNome " />
< TextView
android : id = " @+id/txtEspecie "
android : layout_width = " 162dp "
android : layout_height = " 20dp "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : text = " TextView "
app : layout_constraintStart_toEndOf = " @+id/textView2 "
app : layout_constraintTop_toBottomOf = " @+id/txtNome " />
< TextView
android : id = " @+id/textView4 "
android : layout_width = " wrap_content "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : text = " Idade: "
android : textStyle = " bold "
app : layout_constraintStart_toEndOf = " @+id/txtEspecie "
app : layout_constraintTop_toBottomOf = " @+id/txtNome " />
< TextView
android : id = " @+id/textView5 "
android : layout_width = " wrap_content "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : text = " Raça: "
android : textStyle = " bold "
app : layout_constraintStart_toStartOf = " parent "
app : layout_constraintTop_toBottomOf = " @+id/textView2 " />
< TextView
android : id = " @+id/txtRaca "
android : layout_width = " 179dp "
android : layout_height = " 20dp "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : text = " TextView "
app : layout_constraintStart_toEndOf = " @+id/textView5 "
app : layout_constraintTop_toBottomOf = " @+id/txtEspecie " />
< TextView
android : id = " @+id/textView7 "
android : layout_width = " wrap_content "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : text = " Peso: "
android : textStyle = " bold "
app : layout_constraintStart_toEndOf = " @+id/txtRaca "
app : layout_constraintTop_toBottomOf = " @+id/textView4 " />
< TextView
android : id = " @+id/txtIdade "
android : layout_width = " 0dp "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : layout_marginEnd = " 8dp "
android : text = " TextView "
app : layout_constraintEnd_toEndOf = " parent "
app : layout_constraintStart_toEndOf = " @+id/textView4 "
app : layout_constraintTop_toBottomOf = " @+id/txtNome " />
< TextView
android : id = " @+id/txtPeso "
android : layout_width = " 0dp "
android : layout_height = " wrap_content "
android : layout_marginStart = " 8dp "
android : layout_marginTop = " 8dp "
android : layout_marginEnd = " 8dp "
android : text = " TextView "
app : layout_constraintEnd_toEndOf = " parent "
app : layout_constraintStart_toEndOf = " @+id/textView7 "
app : layout_constraintTop_toBottomOf = " @+id/txtIdade " />
</ androidx.constraintlayout.widget.ConstraintLayout >
menu_principal.xml
<? xml version = " 1.0 " encoding = " utf-8 " ?>
< menu xmlns : app = " http://schemas.android.com/apk/res-auto "
xmlns : android = " http://schemas.android.com/apk/res/android " >
< item
android : icon = " @android:drawable/ic_input_add "
android : title = " Cadastro "
app : showAsAction = " ifRoom "
android : onClick = " cadastrar " />
< item
android : id = " @+id/app_bar_search "
android : icon = " @drawable/ic_search_black_24dp "
android : title = " Consulta "
app : actionViewClass = " android.widget.SearchView "
app : showAsAction = " ifRoom|collapseActionView " />
</ menu >
menu_contexto.xml
<? xml version = " 1.0 " encoding = " utf-8 " ?>
< menu xmlns : app = " http://schemas.android.com/apk/res-auto "
xmlns : android = " http://schemas.android.com/apk/res/android " >
< item android : title = " Excluir " android : onClick = " excluir " />
< item android : title = " Atualizar " android : onClick = " atualizar " />
</ menu >
REFERÊNCIAS
Build Your First Android App in Java - Google Developers
< https://developer.android.com/codelabs/build-your-first-android-app#0 > - Acesso
em 07 de setembro de 2021.
Guia Completo de Android: Básico ao Avançado em Android - DevMedia
< https://www.devmedia.com.br/guia/android/34580 > - Acesso em 07 de setembro de
2021.
Tutorial de Android Studio - DevMedia
< https://www.devmedia.com.br/tutorial-de-android-studio/34003 > - Acesso em 07 de
setembro de 2021.
https://developer.android.com/codelabs/build-your-first-android-app#0
https://www.devmedia.com.br/guia/android/34580
https://www.devmedia.com.br/tutorial-de-android-studio/34003