Apostilha de Android - PARTE 14


Depois de digitarmos o código solicitado, teremos a seguinte aparência abaixo :
159
Layout da tela de cadastro
Agora vamos criar mais uma tela (arquivo de layout XML) para nossa aplicação, que será referente à tela de listagem de usuários cadastrados. O nome da nossa tela vai se chamar “listagem_usuarios_cadastros”.
Após criar a tela da nossa aplicação, abra o editor de XML para digitarmos o seguinte código a seguir :
<?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" >
<LinearLayout
android:id="@+id/layouttopo_luc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fdb46d"
android:orientation="horizontal" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
160
android:src="@drawable/icone_programa" />
<LinearLayout
android:id="@+id/layout_titulo_programa_luc"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center_vertical"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="Listagem de "
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Usuários"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/layout_status_luc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:orientation="horizontal" >
<TextView
android:id="@+id/txtstatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:text="Registros : 1/10"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nome :"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/txtnome"
161
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:text="[NOME]"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#fb7600" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="15dp"
android:text="Endereço :"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/txtendereco"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:text="[ENDERECO]"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#fb7600" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="15dp"
android:text="Telefone :"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/txttelefone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:text="[TELEFONE]"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#fb7600" />
<LinearLayout
android:id="@+id/layout_botoes_luc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:paddingTop="10dp" >
<Button
android:id="@+id/btanterior"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Anterior" />
162
<Button
android:id="@+id/btproximo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Próximo" />
</LinearLayout>
<LinearLayout
android:id="@+id/layout_botao_fechar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical" >
<Button
android:id="@+id/btfechar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fechar" />
</LinearLayout>
</LinearLayout>
Depois de digitarmos o código XML de nossa tela, teremos o seguinte resultado, conforme mostra a figura a seguir :
163
Layout da tela de listagem de usuários
Todos os registros dos usuários cadastrados estarão dentro de um objeto do tipo ArrayList. Para isso, iremos criar agora uma classe que irá armazenar (e retornar) os dados referentes ao usuário (nome, telefone e endereço) chamada Registro.
Essa classe vai estar dentro do mesmo pacote onde se encontra o arquivo “MainActivity.java” (neste caso, o primeiro pacote “usuario.app.sistemadecadastro”). Vamos criar agora uma classe (conforme já foi mostrado) chamada Registro, e em seguida vamos escrever o seu código conforme é mostrado em seguida:
package usuario.app.sistemadecadastro;
public class Registro {
private String nome;
private String endereco;
private String telefone;
164
public Registro(String nome, String endereco, String telefone)
{
this.nome = nome;
this.endereco = endereco;
this.telefone = telefone;
}
public String getNome() { return nome; }
public String getTelefone() { return telefone; }
public String getEndereco() { return endereco; }
}
Agora vamos abrir o arquivo “MainActivity.java” para digitarmos o seguinte código abaixo:
package usuario.app.sistemadecadastro;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
public class MainActivity extends Activity {
private ArrayList<Registro> aRegistro;
TelaPrincipal tela_principal;
TelaCadastroUsuario tela_cadastro;
TelaListagemUsuarios tela_listagem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
aRegistro = new ArrayList<Registro>();
tela_principal = new TelaPrincipal(this);
tela_cadastro = new TelaCadastroUsuario(this, tela_principal);
tela_listagem = new TelaListagemUsuarios(this, tela_principal);
tela_principal.setTelaCadastro(tela_cadastro);
tela_principal.setTelaListagem(tela_listagem);
tela_principal.CarregarTela();
}
public ArrayList<Registro> getRegistros() {
return aRegistro;
}
165
public void ExibirMensagem(String msg) {
AlertDialog.Builder d = new
AlertDialog.Builder(MainActivity.this);
d.setTitle("Aviso");
d.setMessage(msg);
d.setNeutralButton("OK", null);
d.show();
}
}
Muito provavelmente em seu editor de código do Android Developer Tools deverá aparecer inúmeros erros (sublinhados em vermelho e marcados com um “X”). Isso é pelo fato de o código presente nessa classe ainda não existir (ou seja, será criado posteriormente).
A classe MainActivity será responsável por inicializar o vetor onde serão armazenados os registros e carregar as telas da nossa aplicação (onde cada uma delas será gerenciada por uma classe). Vamos analisar o seguinte bloco de código em seguida :
aRegistro = new ArrayList<Registro>();
tela_principal = new TelaPrincipal(this);
tela_cadastro = new TelaCadastroUsuario(this, tela_principal);
tela_listagem = new TelaListagemUsuarios(this, tela_principal);
tela_principal.setTelaCadastro(tela_cadastro);
tela_principal.setTelaListagem(tela_listagem);
tela_principal.CarregarTela();
Na primeira linha do trecho, iniciamos e criamos em memória o nosso ArrayList que armazenará todos os registros que serão gerenciados pelo nosso programa.
No trecho restante criamos as instâncias das classes responsáveis pelo gerenciamento de cada dela do programa (que AINDA VÃO SER CRIADAS, com seus respectivos métodos) , são elas : TelaPrincipal, TelaCadastroUsuario , TelaListagemUsuarios.
Na última instrução do trecho acima, carregamos a tela principal do programa, através do método CarregarTela da classe TelaPrincipal (método e classes que ainda serão criados).
166
Vamos criar agora uma classe (dentro do pacote “usuario.app.sistemadecadastro”) chamada TelaPrincipal com o seguinte código a seguir :
package usuario.app.sistemadecadastro;
import android.view.View;
import android.widget.Button;
public class TelaPrincipal {
MainActivity act;
Button btcadastrar_usuario;
Button bt_listar_usuarios_cadastrados;
TelaCadastroUsuario tela_cadastro;
TelaListagemUsuarios tela_listagem;
public TelaPrincipal(MainActivity act) {
this.act = act;
}
public void CarregarTela()
{
act.setContentView(R.layout.tela_principal);
btcadastrar_usuario = (Button)
act.findViewById(R.id.btcadastrar_usuario);
bt_listar_usuarios_cadastrados = (Button)
act.findViewById(R.id.bt_listar_usuarios_cadastrados);
btcadastrar_usuario.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
tela_cadastro.CarregarTela();
}
});
bt_listar_usuarios_cadastrados.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
tela_listagem.CarregarTela();
}
});
}
167
public void setTelaCadastro(TelaCadastroUsuario tela_cadastro)
{
this.tela_cadastro = tela_cadastro;
}
public void setTelaListagem(TelaListagemUsuarios tela_listagem)
{
this.tela_listagem = tela_listagem;
}
}
Essa classe simplesmente tem a finalidade de mostrar a tela principal do programa, permitindo que o usuário escolha uma das opções da aplicação que permite cadastrar o usuário e listar os usuários cadastrados.
Agora vamos criar uma nova classe chamada TelaCadastroUsuario (dentro do pacote “usuario.app.sistemadecadastro”) com o seguinte código em seguida :
package usuario.app.sistemadecadastro;
import android.app.*;
import android.content.DialogInterface;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class TelaCadastroUsuario {
MainActivity act;
EditText ednome,edendereco, edtelefone;
Button btcadastrar, btcancelar_cadastro;
TelaPrincipal tela_principal;
public TelaCadastroUsuario(MainActivity act, TelaPrincipal
tela_principal)
{
this.act = act;
this.tela_principal = tela_principal;
}
public void CarregarTela()
{
act.setContentView(R.layout.cadastro_de_usuarios);
ednome = (EditText) act.findViewById(R.id.ednome);
edtelefone = (EditText) act.findViewById(R.id.edtelefone);
168
edendereco = (EditText) act.findViewById(R.id.edendereco);
btcadastrar = (Button) act.findViewById(R.id.btcadastrar);
btcancelar_cadastro = (Button)
act.findViewById(R.id.btcancelar_cadastro);
btcadastrar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder dialogo = new
AlertDialog.Builder(act);
dialogo.setTitle("Aviso");
dialogo.setMessage("Cadastrar usuário ?");
dialogo.setNegativeButton("Não", null);
dialogo.setPositiveButton("Sim", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
String nome =
ednome.getText().toString();
String telefone =
edtelefone.getText().toString();
String endereco =
edendereco.getText().toString();
act.getRegistros().add(new
Registro(nome,telefone,endereco));
act.ExibirMensagem("Cadastro efetuado com
sucesso.");
tela_principal.CarregarTela();
}
});
dialogo.show();
}
});
btcancelar_cadastro.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder dialogo = new
AlertDialog.Builder(act);
dialogo.setTitle("Aviso");
dialogo.setMessage("Sair do cadastro ?");
dialogo.setNegativeButton("Não", null);
169
dialogo.setPositiveButton("Sim", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
tela_principal.CarregarTela();
}
});
dialogo.show();
}
});
}
}
O código da classe TelaCadastroUsuario será responsável por efetuar os registros dos cadastros dos usuários na aplicação.
Agora vamos criar uma classe chamada TelaListagemUsuarios (dentro do pacote “usuario.app.sistemadecadastro”), com o seguinte código em seguida:
package usuario.app.sistemadecadastro;
import android.app.AlertDialog;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class TelaListagemUsuarios {
MainActivity act;
TelaPrincipal tela_principal;
Button btanterior, btproximo, btfechar;
TextView txtnome, txttelefone, txtendereco, txtstatus;
int index;
public TelaListagemUsuarios(MainActivity act,TelaPrincipal
tela_principal) {
this.act = act;
this.tela_principal = tela_principal;
index = 0;
}
170
public void CarregarTela()
{
//Antes de carregar a tela, verifica se existe registros
//inseridos
if(act.getRegistros().size() == 0)
{
(new AlertDialog.Builder(act))
.setTitle("Aviso")
.setMessage("Não existe nenhum registro cadastrado.")
.setNeutralButton("OK", null)
.show();
return;
}
act.setContentView(R.layout.listagem_usuarios_cadastrados);
btanterior = (Button) act.findViewById(R.id.btanterior);
btproximo = (Button) act.findViewById(R.id.btproximo);
btfechar = (Button) act.findViewById(R.id.btfechar);
txtnome = (TextView) act.findViewById(R.id.txtnome);
txtendereco = (TextView) act.findViewById(R.id.txtendereco);
txttelefone = (TextView) act.findViewById(R.id.txttelefone);
txtstatus = (TextView) act.findViewById(R.id.txtstatus);
PreencheCampos(index);
AtualizaStatus(index);
btanterior.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(index > 0)
{
index--;
PreencheCampos(index);
AtualizaStatus(index);
}
}
});
btproximo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(index < act.getRegistros().size() - 1)
{
index++;
PreencheCampos(index);
AtualizaStatus(index);
}
171
}
});
btfechar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tela_principal.CarregarTela();
}
});
}
private void PreencheCampos(int idx)
{
txtnome.setText(act.getRegistros().get(idx).getNome());
txttelefone.setText(act.getRegistros().get(idx).getTelefone());
txtendereco.setText(act.getRegistros().get(idx).getEndereco());
}
private void AtualizaStatus(int idx)
{
int total = act.getRegistros().size();
txtstatus.setText("Registros : " + (idx+1) + "/" + total);
}
}
Essa classe será responsável por mostrar a listagem dos usuários cadastrados no sistema.
Depois de digitarmos todos os códigos das classes mencionadas anteriormente, vamos executar a nossa aplicação. O resultado você confere na figura seguinte :
172
Aplicação em execução – Tela principal
Quando executamos a nossa aplicação, o que visualizamos e a tela principal da aplicação. Quando clicamos no botão “Listar usuários cadastrados”, é executado o seguinte trecho de código dentro da classe TelaListagemUsuarios :
if(act.getRegistros().size() == 0)
{
(new AlertDialog.Builder(act))
.setTitle("Aviso")
.setMessage("Não existe nenhum registro cadastrado.")
.setNeutralButton("OK", null)
.show();
return;
}


Comentários