quarta-feira, 23 de maio de 2012

sexta-feira, 18 de maio de 2012

Linq - Uso do CASE para agrupamento por mês


var dataContext = new Entities();

            var mes = from enc in dataContext.Tabela
                              select new
                              {
                                  conta = enc.CONTA,
                                  Janeiro = (enc.DATA.Value.Month == 1 ? enc.VALOR.Value : 0),
                                  Fevereiro = (enc.DATA.Value.Month == 2 ? enc.VALOR.Value : 0),
                                  Março = (enc.DATA.Value.Month == 3 ? enc.VALOR.Value : 0),
                                  Abril = (enc.DATA.Value.Month == 4 ? enc.VALOR.Value : 0),
                                  Maio = (enc.DATA.Value.Month == 5 ? enc.VALOR.Value : 0),
                                  Junho = (enc.DATA.Value.Month == 6 ? enc.VALOR.Value : 0),
                                  Julho = (enc.DATA.Value.Month == 7 ? enc.VALOR.Value : 0),
                                  Agosto = (enc.DATA.Value.Month == 8 ? enc.VALOR.Value : 0),
                                  Setembro = (enc.DATA.Value.Month == 9 ? enc.VALOR.Value : 0),
                                  Outubro = (enc.DATA.Value.Month == 10 ? enc.VALOR.Value : 0),
                                  Novembro = (enc.DATA.Value.Month == 11 ? enc.VALOR.Value : 0),
                                  Dezembro = (enc.DATA.Value.Month == 12 ? enc.VALOR.Value : 0)
                              };
                           
         
            dataGridView1.DataSource = mes;

Firebird - Arredondamento de casas decimais com o Cast


SELECT cast(VAL_TOT AS NUMERIC(15,2)) FROM funcionarios

onde VAL_TOT é o campo onde deseja realizar o arredondamento.

Asp.Net - exportar Gridview para PDF


Usar o componente Free itextCsharp.dll, do site: http://sourceforge.net/projects/itextsharp/

Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=theclubPanel2.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
GridView1.AllowPaging = false;
GridView1.DataBind();
GridView1.RenderControl(hw);
GridView1.HeaderRow.Style.Add("width", "15%");
GridView1.HeaderRow.Style.Add("font-size", "10px");
GridView1.Style.Add("text-decoration", "none");
GridView1.Style.Add("font-family", "Arial, Helvetica, sans-serif;");
GridView1.Style.Add("font-size", "8px");
StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(PageSize.A2, 7f, 7f, 7f, 0f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();

Android – Trabalhando com Menus via XML e Java


Neste artigo abordarei um assunto muito interessante em se tratando de programação Android, a criação de Menus. Continuo utilizando a versão 2.2 do Android. Existem duas formas para se trabalhar com menus, sendo:

- Criação de Menus via XML.
- Criação de Menus via codificação Java.

O resultado obtido é o mesmo, só mudando a forma de programar.

Utilizando o guia On-Line

Antes de colocarmos a mão na massa gostaria de explorar a documentação do Sistema Android encontrada no site:

Muitos programadores não usam este guia On-line, eu reforço que é de extrema importância a utilização do mesmo para fins de aprendizado. Navegue até o item “Reference” e obtemos ali todas as informações necessárias para o desenvolvimento do exemplo neste artigo, no nosso caso localize o item “Android.View” e escolha a interface “Menu” ou “MenuItem”. Ver Imagem 01.


Figura 01: Guia Prático On-line.


Conceitos Básicos

Podemos trabalhar com vários tipos de Menus, como: Menus de Contextos, Menus de Opções e Sub-Menus. Neste artigo Sobrescrevemos alguns métodos da classe Activity utilizando o “Override”, que no português significa Sobrescrita. Sendo:


Método
Descrição
public boolean onCreateOptionsMenu(Menu menu) 

Método booleano responsável pela criação dos itens do Menu, Sub-Menu ou Menus de Contexto.
public boolean onOptionsItemSelected(MenuItem item)

Método booleano responsável por chamar as rotinas dos itens dos menus.

Criação de Menus Via XML

O primeiro passo seria criar um Projeto Android clicando em “File/New/Android Project...” definindo o nome como “Menu_Xml”. Localize o diretório “res” e crie uma pasta chamada “menu”. Dentro desta pasta criamos o arquivo XML responsável pela criação do Menu. Para isto clique com o botão direito escolhendo New/Other e definindo o nome para “lista.xml”, ver imagem 02.


Figura 02: Arquivo lista.xml.


Logo em seguida adicione algumas imagens no diretório “drawable” seguindo praticamente os mesmos passos descritos anteriormente. Estas imagens servirão de ícones para o Menu.
Neste arquivo iremos definir o id, o nome e a imagem para ser utilizada no menu, segue adiante a codificação.


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
      android:id="@+id/cadastrar"
      android:title="Cadastrar"
      android:icon="@drawable/img01"/>
    <item
      android:id="@+id/Movimentos"
      android:title="Movimentos"
      android:icon="@drawable/img02"/>
    <item
      android:id="@+id/Caixa"
      android:title="Caixa"
      android:icon="@drawable/img03"/>
</menu>

É muito simples, utilizamos apenas duas TAGS, sendo: a primeira o Menu e a segunda os Itens. O Xml deverá ficar idêntico ao da Imagem 03.

Figura 03: Android Menu.


Todas as imagens utilizadas no exemplo estarão disponibilizadas no final do artigo junto com o exemplo.
Localize a classe “Menu_xmlActivity” para implementarmos os métodos descritos acima. Importe os pacotes:

import pct.Menu_xml.R.id;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

Logo após o método OnCreate() sobrescreva os métodos abaixo:

@Override
public boolean onCreateOptionsMenu(Menu menu)      
{
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.lista, menu);
    return super.onCreateOptionsMenu(menu);
}

A Classe MenuInflater é responsável por capturar todos os itens do menu localizado no arquivo XML criado anteriormente. Note que temos um “return” que nos devolve a classe pai do método sobrescrito.

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
//Realizar um case pelo “Id” dos itens e logo em seguida mostrar uma mensagem ao usuário
  switch (item.getItemId())
  {     
   case id.cadastrar: Mensagem("Cadastrar", "The Club - Cadastro!");
   break;
   case id.Movimentos: Mensagem("Movimentos", "The Club –
   Movimentos!");
   break;
   case id.Caixa: Mensagem("Caixa", "The Club - Caixa!");
   break;    
  }
   //Retornar a classe pai
   return super.onOptionsItemSelected(item);
}


//Rotina para exibir mensagem ao usuário
public void Mensagem(String titulo, String texto)
{
AlertDialog.Builder mensagem = new          AlertDialog.Builder(Menu_xmlActivity.this);
   mensagem.setTitle(titulo);
   mensagem.setMessage(texto);
   mensagem.setNeutralButton("OK", null);
   mensagem.show();
}


Já método booleano OnOptionsItemSelected() é responsável por tratar os itens pela sua identificação “getItemId”. Este método é responsável por chamar as rotinas necessárias ao utilizar os itens de Menu. O projeto de Menu em XML deverá ficar identido ao da Figura 04.

Figura 04: Menu XML em Run-Time.


Criação de Menus Via programação Java

A criação de Menus Via Programação é parecida com via XML, a única diferença é que não precisaremos do arquivo XML, ou seja, programaremos todo o código. Para isto crie outro Projeto Android clicando em “File/New/Android Project...” definindo o nome como “Menu_Java”. Localize o diretório “src” para implementarmos em nossa “Activity” o código necessário. Faremos um pouco diferente neste exemplo, programaremos a interface “Sub menus”. Veja a seguir o código:
Importe os pacotes:


import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;

Logo após o método OnCreate() sobrescreva os métodos abaixo:

@Override
public boolean onCreateOptionsMenu(Menu menu)      
{
    boolean resultado = super.onCreateOptionsMenu(menu);
    super.onCreateOptionsMenu(menu);
    menu.add(0,1,0,"Cadastros").setIcon(R.drawable.img01);
    menu.add(0,2,0,"Movimentos").setIcon(R.drawable.img02);
    menu.add(0,3,0,"Caixa").setIcon(R.drawable.img03);
   
    SubMenu utilitario = menu.addSubMenu("Relatórios").setIcon(R.drawable.img04);
    utilitario.add(0,4,0,"Contas a Pagar");
    utilitario.add(0,5,0,"Contas a Receber");
        
    return resultado;
}


Neste caso não utilizamos a classe MenuInflater, pois estamos criando o menu e os itens do sub-menu via programação. O objeto “menu” implementa o método “add”, tendo como parâmetros: o grupo, o item, a ordenação e o título. O método “setIcon” define os ícones dos menus. Já com a classe sub-menu não conseguimos adicionar ícones, tendo suas funcionalidades parecidas com as do “Menu”.


@Override
public boolean onOptionsItemSelected(MenuItem item)
{
   switch (item.getItemId())
   {   
    case 1: Mensagem("Cadastros", "The Club - Cadastro!");
    break;
     case 2: Mensagem("Movimentos", "The Club - Movimentos!");
     break;
     case 3: Mensagem("Caixa", "The Club - Caixa!");
     break;
     case 4: Mensagem("Contas a Pagar", "The Club - Contas a Pagar!");
     break;       
     case 5: Mensagem("Contas a Receber", "The Club - Contas a Receber!");
     break;       
    }
    //retornar a classe pai
    return super.onOptionsItemSelected(item);
}

   
//Rotina para exibir mensagem ao usuário
public void Mensagem(String titulo, String texto)
{
AlertDialog.Builder mensagem = new         AlertDialog.Builder(Menu_JavaActivity.this);
   mensagem.setTitle(titulo);
   mensagem.setMessage(texto);
   mensagem.setNeutralButton("OK", null);
   mensagem.show();
}


O método booleano OnOptionsItemSelected() segue a mesma lógica no que foi criado anteriormente, sendo responsável por tratar os itens pela sua identificação “getItemId” chamando as rotinas necessárias ao utilizar os itens de Menu. A única diferença é que possuímos alguns itens a mais.
A classe Builder novamente está presente em nosso exemplo, tendo como papel mostrar uma mensagem informativa ao usuário. O exemplo deverá ficar identico ao da Figura 05. A Figura 06 ilustra a utilização de Sub Menus.

Figura 05: Menu via Programação em Run-Time.


Figura 06: Sub-Menus.

Conclusão

Vimos neste artigo duas formas de criação de menus no Sistema Android. Sendo a primeira utilizando um arquivo XML e a segunda apenas via programação tendo como resultado o mesmo. Reforço o que escrevi no início do artigo, utilizem o site oficial do Android para poder aprender mais sobre esta tecnologia, tendo sua documentação necessária para se desenvolver praticamente tudo.
Um abraço e até o mês que vem!


domingo, 6 de maio de 2012

Delphi - trabalhando com OCR


function  JP_OCR(ARQUIVO: STRING): STRING;
var
midoc,miword: OleVariant;
s: string;
i: integer;
begin
midoc := CreateOleObject('MODI.Document');
midoc.create(ARQUIVO);
midoc.images[0].ocr(22,0,0);
s := '';
for i := 0 to  midoc.images[0].layout.words.count-1 do
begin
miword := midoc.images[0].layout.words[i];
s := s+' '+miword.text;
end;
result := s;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(JP_OCR('C:\img.jpg') );
end;

sexta-feira, 4 de maio de 2012

Android - Navegando entre telas



Neste artigo explicarei mais alguns recursos básicos do Android e em seguida será criado um exemplo de como trabalhar com várias telas e navegar entre elas. Aproveitaremos o exemplo montado no mês anterior.
Para trabalhar com várias telas é necessário criar vários templates que ficarão armazenados na pasta “res/layout”, assim como o template “main.xml” que é criado por padrão.
Cada “xml” localizado nesta pasta pode ter um layot diferente, podendo ser alterado como desejar.

Conceitos Básicos e essenciais

Antes de colocarmos mãos à obra, abaixo gostaria de explicar alguns recursos que serão utilizados neste artigo e em outros posteriores.

O que é um Activity?

Um “Activity” ou uma atividade representa uma tela qualquer do sistema, sendo a peça principal de sua aplicação. Responsável por exibir todos os componentes gráficos. Uma aplicação Android geralmente possui uma ou mais Atividade estando relacionadas entre si.
O método “OnCreate()” é obrigatório, pois durante o ciclo de vida de uma Atividade ele é chamado no momento que ela estiver sendo criada, sendo uma boa prática inicializarmos tarefas de carregamento de recursos e logo em seguida executar o método SetContentView(), este sendo responsável por carregar o layout da aplicação.
Importante: Toda Atividade deve ser declarada no “AndroidManifest.xml” utilizando a tag  <activity>.

O que é o R.java?

É a classe responsável por gerenciar os recursos de nossa aplicação. O Android localiza um recurso específico atraves dos denominados “IDs” e quem os gerencia é a classe “R.java”, sendo criado automaticamente quando iniciamos um novo projeto.
Esta classe não deve ser alterada de forma nenhuma e é gerenciada atomaticamente pelo Sistema Android.
Neste artigo específico utilizaremos o comando:

setContentView(R.Layout.cadastro);

Toda atividade possui o método acima, que é responsável por carregar toda a hierarquia de layout definida no arquivo “xml”. Neste momento é que a classe “R.java” entra em ação, ela está diretamente ligada à uma atividade. Quando pasamos “R.Layout.cadastro” como parâmetro para este método, é como se disséssemos para o Android carregar um recurso do tipo “layout” cujo nome é “cadastro.xml”.

Importando um projeto pronto

Para isto clique em “File/Import” e escolha a opção “Existing Projects into Workspace” localizada na aba “General”. O próximo passo é selecionar onde o projeto foi criado e em seguida concluir clicando no botão “Finish”. Ver Imagem 01.


Figura 01: Importação de um projeto.

Fique à vontade para renomear o projeto da maneira que desejar. Neste caso aproveitaremos o lay-out da tela, adaptaremos o código de sua “Activity” e a classe “Registro.java”. No meu caso utilizei esta tela como “cadastro.xml”, mas fiquem a vontade para trabalhar da forma que desejarem.

Criando a tela main.xml

Clique no diretório “res/layout” e com o botão direito escolha “New/Other...” e aparecerá uma tela como ilustra a Figura 02, escolha “XML/XML File” clique em Next, defina como “main.xml” e conclua logo em seguida.

Figura 02: Criando um XML.

Uma dica que deixo aqui seria de copiar todo conteúdo XML da tela de cadastro e ir excluindo os componentes que não for utilizar, isto economiza tempo e trabalho.

Adicionaremos os seguintes componentes:

1 LinearLayout , 4 textView e 2 botões. A Figura 03 mostra como ficou o lay-out e a Figura 04 a disposição dentro do Linearlayout.

Figura 03: Lay-out tela Principal.

Figura 04: Configuração dos componentes.

E o código XML ficou da seguinte maneira:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:weightSum="1">
    <TextView android:id="@+id/textView1"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:layout_width="wrap_content"
    android:text="TELA PRINCIPAL - THE CLUB"
    android:layout_gravity="center"
    android:layout_height="78dp"></TextView>
    <Button android:text="Cadastrar"
    android:id="@+id/btCadastrar"
    android:layout_height="100dp"
    android:layout_width="260dp"
    android:layout_gravity="center"></Button>
    <Button android:text="Consultar"
    android:id="@+id/btConsultar"
    android:layout_height="100dp"
    android:layout_width="260dp"
    android:layout_gravity="center"></Button>
    <TextView android:id="@+id/textView4"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:layout_width="match_parent"
    android:text=" "
    android:layout_height="103dp"></TextView>
    <TextView android:id="@+id/textView2"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:layout_width="wrap_content"
    android:text="Conheça o The Club"
    android:layout_gravity="center"
    android:layout_height="wrap_content"></TextView>
    <TextView android:id="@+id/textView3"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:layout_width="wrap_content"
    android:text="http://www.theclub.com.br/"
    android:layout_gravity="center"
    android:layout_height="wrap_content"></TextView>
</LinearLayout>

Criando a tela consulta.xml

Seguindo os mesmos passos da tela principal, adicione um arquivo do tipo XML e em seguida os seguintes componentes:

 5 LinearLayout, 9 TextViewer, 1 RadioGroup e 1 Button

A Figura 05 mostra como ficou o lay-out e a Figura 06 a disposição dentro do Linearlayout.

Figura 05: Lay-Out tela de Consulta.

Figura 06: Configuração dos componentes.

E o código XML ficou da seguinte maneira:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="CONSULTAR"></TextView>
    <LinearLayout android:layout_height="wrap_content"
       android:orientation="vertical"
       android:layout_width="wrap_content"
       android:id="@+id/linearLayout2">
       <TextView android:id="@+id/textView1"
       android:textAppearance="?android:attr/textAppearanceLarge"
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:text="Nome Cliente:"></TextView>
       <TextView android:textAppearance="?android:attr/textAppearanceMedium"
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:id="@+id/lbCliente"
       android:text="lbCliente"></TextView>
    </LinearLayout>
    <LinearLayout android:layout_height="wrap_content"
       android:layout_width="match_parent"
       android:id="@+id/linearLayout1"
       android:orientation="horizontal">
       <LinearLayout android:layout_height="match_parent"
       android:orientation="vertical"
       android:layout_width="wrap_content"
       android:id="@+id/linearLayout4">
       <TextView android:id="@+id/textView9"
       android:textAppearance="?android:attr/textAppearanceLarge"
       android:layout_height="wrap_content"
       android:text="Cidade"
       android:layout_width="214dp"></TextView>
       <TextView android:textAppearance="?android:attr/textAppearanceMedium"
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:id="@+id/lbCidade"
       android:text="lbCidade"></TextView>
    </LinearLayout>
    <LinearLayout android:layout_height="match_parent"
       android:orientation="vertical"
       android:id="@+id/linearLayout3"
       android:layout_width="match_parent">
       <TextView android:text="Estado"
       android:id="@+id/textView10"
       android:layout_width="wrap_content"
       android:textAppearance="?android:attr/textAppearanceLarge"
       android:layout_height="wrap_content"></TextView>
       <TextView android:textAppearance="?android:attr/textAppearanceMedium"
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:id="@+id/lbEstado"
       android:text="lbEstado"></TextView>
    </LinearLayout>
    </LinearLayout>
    <RadioGroup android:id="@+id/rgCursos"
       xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content">
       <TextView android:id="@+id/textView2"
       android:layout_width="wrap_content"
       android:textAppearance="?android:attr/textAppearanceLarge"
       android:layout_height="wrap_content"
       android:includeFontPadding="true"
       android:hapticFeedbackEnabled="true"
       android:text="Produto:"></TextView>
       <TextView android:layout_width="wrap_content"
       android:textAppearance="?android:attr/textAppearanceMedium"
       android:layout_height="wrap_content"
       android:id="@+id/lbProduto"
       android:text="lbProduto"></TextView>
    </RadioGroup>
    <Button android:layout_gravity="center"
    android:layout_width="81dp"
    android:text="Voltar"
    android:id="@+id/btVoltarConsulta"
    android:layout_height="wrap_content"></Button>
</LinearLayout>

Codificando nosso Exemplo

O principal método é o SetContentView(), ele é responsável por carregar o layout da aplicação. Portanto, iremos utilizá-lo para carregar e navegar entre nossas telas. Serão criadas três Procedures e neste caso todas serão implementadas em nossa “Activity” principal que no meu caso deixei como “NavegandoActivity”

ChamaMenuPrincipal() – Responsável por executar a tela principal.
ChamaCadastro() – Responsável por executar a tela de cadastro.
ChamaConsulta() - Responsável por executar a tela de consulta.
MensagemAlerta() - Responsável por executar uma caixa de alerta.

Variáveis globais

//Classe Registro
Registro reg;
     
//Variáveis da Tela de Cadastro
RadioGroup rgCursos;
RadioButton rbLiteDelphi, rbLiteC, rbProfessional, rbStudent;
TextView txtCliente, txtCidade, txtEstado;
Spinner spEstado;
Button btEfetuar;
     
//Variáveis da Tela de Consulta
TextView txtCli, txtCid, txtEst, txtCur;

No evento OnCreate() é onde invocaremos o métodos ChamaMenuPrincipal()

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    ChamaMenuPrincipal();
}

Abaixo a implementação dos Métodos utilizados seguidos de uma breve explicação:

public void ChamaMenuPrincipal()
{
     setContentView(R.layout.main);
     ChamaCadastro();
     ChamaConsulta();
}

O método ChamaMenuPrincipal() engloba também os dois métodos ChamaCadastro() e o ChamaConsulta().

public void ChamaCadastro()
{
    Button btCadastrar = (Button) findViewById(R.id.btCadastrar);
    btCadastrar.setOnClickListener(new View.OnClickListener()
    {  
        @Override
         public void onClick(View v)
         {
             setContentView(R.layout.cadastro);
             rgCursos = (RadioGroup) findViewById(R.id.rgCursos);
             rbLiteDelphi = (RadioButton) findViewById(R.id.rbLiteDelphi);
rbLiteC = (RadioButton) findViewById(R.id.rbLiteC);
              rbProfessional = (RadioButton) findViewById(R.id.rbProfessional);
             rbStudent = (RadioButton) findViewById(R.id.rbStudent);
             txtCliente = (TextView) findViewById(R.id.edtCliente);
             txtCidade = (TextView) findViewById(R.id.edtCidade);
             spEstado = (Spinner) findViewById(R.id.spnEstado);
             btEfetuar = (Button) findViewById(R.id.btnEfetuar);
                
             btEfetuar =  (Button) findViewById(R.id.btnEfetuar);
             btEfetuar.setOnClickListener(new View.OnClickListener()
             {
                 @Override
                  public void onClick(View arg0)
                  {
                      reg = new Registro();
                      reg.cliente = txtCliente.getText().toString();
                      reg.cidade = txtCidade.getText().toString();
                      reg.estado = spEstado.getSelectedItem().toString();
                                       
                      switch (rgCursos.getCheckedRadioButtonId())
                      {
                         case R.id.rbLiteDelphi : reg.curso = 1;
                         break;
                                              
                         case R.id.rbLiteC : reg.curso = 2;
                         break;
                                       
                         case R.id.rbProfessional : reg.curso = 3;
                         break;
                                              
                         case R.id.rbStudent : reg.curso = 4;
                         break;
                       }
                                 
MensagemAlerta("Resultado", "Venda Efetuada com sucesso!" + "\n" +
                           "--------------------------------------" +
                           "Cliente: " + reg.cliente + "\n"+
                           "Cidade: " + reg.cidade + 
                           " / Estado: " + reg.estado + "\n" +
                           "Cód. Curso: " + reg.curso);
                   }
             });
                   
       Button btVoltarCadastro = (Button) findViewById(R.id.btVoltarCadastro);
       btVoltarCadastro.setOnClickListener(new View.OnClickListener()
       {
           @Override
           public void onClick(View v)
          
               ChamaMenuPrincipal();
           }
       });
   }
 });
}

public void MensagemAlerta(String titulo, String corpo)
{     
AlertDialog.Builder infoResultado = new  AlertDialog.Builder(NavegandoActivity.this);
    infoResultado.setTitle(titulo);
    infoResultado.setMessage(corpo); 
    infoResultado.setNeutralButton("Ok",null);
    infoResultado.show();
}

O que devemos salientar nesta função ChamaCadastro() é que foi inserido um “Button” Voltar logo abaixo do Botão “Efetuar Venda”. Este botão permite navegar até a tela principal através do método ChamaMenuPrincipal(), não podemos esquecer que os dados digitados em nossa tela de cadastro serão armazenados em uma Classe “Registro” podendo ser consultados na tela de Consulta.

public void ChamaConsulta()
{
   Button btConsultar = (Button) findViewById(R.id.btConsultar);
   btConsultar.setOnClickListener(new View.OnClickListener()
   {
       @Override
       public void onClick(View v)
       {
             setContentView(R.layout.consulta);
            
              txtCli = (TextView) findViewById(R.id.lbCliente);
             txtCid = (TextView) findViewById(R.id.lbCidade);
             txtEst = (TextView) findViewById(R.id.lbEstado);
             txtCur = (TextView) findViewById(R.id.lbProduto);
                     
             txtCli.setText(reg.cliente);
             txtCid.setText(reg.cidade);
             txtEst.setText(reg.estado);
                      
              switch (reg.curso)
              {
                    case 1: txtCur.setText("The Club Lite (Delphi) - R$59,90");
                    break;
                    case 2: txtCur.setText("The Club Lite (C#) - R$59,90");
                    break;
                    case 3: txtCur.setText("The Club Professional - R$88,00");
                    break;
                    case 4: txtCur.setText("The Club Student - R$25,00");
                    break;
             }
                          
Button btVoltarConsulta = (Button) findViewById(R.id.btVoltarConsulta);
                          
             btVoltarConsulta.setOnClickListener(new View.OnClickListener()
              {
                    @Override
                    public void onClick(View v)
                    {
                          ChamaMenuPrincipal();
                    }
             }); 
                            
       }
    });
}

Já o Método ChamaConsulta() tem como objetivo carregar os dados inseridos na classe Registro. Quando chamarmos a tela aproveitamos e carregamos os dados em seus respectivos componentes, seguido de um “Switch – case” para fazer o inverso no que foi feito na tela de cadastro, ou seja, vamos ler um número inteiro e carregar um texto referente o que foi escolhido. O botão voltar tem a função de chamar o Menu Principal.

Figura 07: Exemplo em Run-Time.

Conclusão

Aprendemos neste artigo alguns conceitos básicos para navegar entre telas no sistema Android. Complementamos o artigo do mês passado e concluímos com um exemplo prático e fácil. Espero que os senhores possam implementar outros recursos e que estes exemplos sejam úteis no no decorrer do desenvolvimento.
Abraço e até o mês que vem!

Fonte de Informações