Criando uma aplicação básica para o Android a partir do zero

Neste artigo, que é a primeira parte de uma série de quatro, iremos ver como criar uma aplicação rudimentar que mostre os básico para desenvolver uma aplicação para a plataforma Android. Nessa nossa aplicação, teremos apenas duas telas, que serão um formulário de entrada de dados e um outro para listagem dos dados inseridos.

 

O início

Para começo de conversa, devemos criar um projeto no Eclipse. Aqui, vamos supor que você já tenha instalado na sua máquina o SDK do Android e o plugin ADT para o e Eclipse. Caso ainda não tenha feito isso, siga os passos descritos aqui.
Para criar o projeto, siga os seguintes passos:

  1. Clique em File → New → Project
  2. Na caixa de diálogo que se abre, selecione Android/Android Project e clique em Next
  3. Informe um nome para o projeto e clique em Next
  4. Selecione sobre qual versão do SDK sua aplicação rodará e clique em Next
  5. Informe um nome para o pacote que irá armazenar os arquivos de código de dua aplicação e clique em Finish.

Criando a interface

Agora vamos criar a interface da nossa aplicação. Como falamos anteriormente, a nossa aplicação será composta de uma formulário para entrada de dados e outro para listar os dados inseridos que permita que ao tocarmos em um item da lista, seja aberto uma tela com mais detalhes sobre o item selecionado.
Para começar a criar a nossa interface, abra o arquivo res/layout/main.xml. A primeira coisa a se fazer aqui é apagar todos os widgets criados por padrão para essa interface. Para isso, vamos passar a visualização do código xml do projeto, clicando na aba main.xml na parte de baixo da janela. Apague todo o código existente e use o código a seguir:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="16sp" >
</TextView>

 
Agora, no aquivo *.java que foi criado automaticamente pelo SDK, e se encontra no diretório src/<nome_do_pacote> com o mesmo nome da Activity que foi informado no momento da instalação, substitua o código da classe <nome_da_activity>Activity pelo código abaixo:

public void onCreate(Bundle savedInstanceState) {
    	  super.onCreate(savedInstanceState);
    	  setListAdapter(new ArrayAdapter<String>(this, R.layout.main, List.retornaLista()));
    	  ListView lv = getListView();
    	  lv.setTextFilterEnabled(true);
    	  lv.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
				// TODO Auto-generated method stub
				Toast.makeText(getApplicationContext(), ((TextView) arg1).getText(), Toast.LENGTH_SHORT).show();
			}
    	  });
    	}

Para que esse código funcione, precisamos adicionar duas classes: uma chamada ListItem.java que possuirá todos os atributos de nosso formulário e uma classe List.java que será a lista de itens propriamente dita, e deve ter obrigatoriamente os métodos adicionarItem e retornarLista. Um exemplo do código dessas classes pode ser visto a seguir:
ListItem.java

class ListItem {
private:
   String Primeiro_Nome;
   String Ultimo_Nome;
   ListItem proximo;
public:
   String getPrimeiroNome();
   void setPrimeiroNome(String nome);
   String getUltimoNome();
   void setUltimoNome(String nome);
   ListItem(String nome1, String nome2);
}

List.java

class List {
private:
   ListItem primeiro;
public:
   void adicionarItem(String nome1, String nome2);
   String [] retornaLista();
}

 
Agora adicione ao projeto um arquivo XML com o nome adiciona.xml que conterá o formulário que permitirá adicionarmos novos itens a nossa lista. O código XML para esse arquivo se parecerá com o seguinte:

<?xml version="1.0" encoding="utf-8"?>
    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Nome:"
                android:textAppearance="?android:attr/textAppearanceLarge" />
            <EditText
                android:id="@+id/editText1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ems="10" >
                <requestFocus />
            </EditText>
        </TableRow>
        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center" >
            <Button
                android:id="@+id/button1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Ok" />
        </TableRow>
</TableLayout>

Para adicionar outros campos, basta copiar e colar o seguinte trecho de código, lembrando sempre de alterar o nome do campo (identificado pelo atributo android:id), e obviamente, o texto que aparece na tela (identificado por android:text):

<TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Nome:"
                android:textAppearance="?android:attr/textAppearanceLarge" />
            <EditText
                android:id="@+id/editText1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ems="10" >
                <requestFocus />
            </EditText>

 
Vale lembrar que todos os atributos da classe ListItem.java descrita acima deve ter um TextView/EditView associado a ele. Agora, você precisa adicionar uma nova classe no seu projeto, que irá executar os comandos associados ao clique do botão adicionado ao formulário. O código dessa classe é mostrado a seguir:

        private EditText nome1, nome2;
	private Button okButton;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.nome1 = (EditText) this.findViewById(R.id.editText1);
        this.nome2 = (EditText) this.findViewById(R.id.editText2);
        this.okButton = (Button) this.findViewById(R.id.button1);
        this.okButton.setOnClickListener(new OnClickListener() {
            public void onClick(final View v) {
               List.adicionarItem(nome1, nome2);
            }
         });
    }

É preciso salientar aqui que cada TextView/EditView adicionado ao formulário deve ter seu par equivalente de atributos private input/output, assim como qualquer outro widget adicionado ao formulário. Para cada atributo/widget, pode/deve ser criado um Listener  como o okButton.setOnClickListener onde é inserido o código que descreve como a ação indica pelo nome da função deve ser executada.