sexta-feira, 30 de março de 2012

Android - Layout LinearLayout

Olá, Pessoal

Vou iniciar uma série de tutorias a respeito de layout, hoje começarei com o LinearLayout, esse que é o mais básico de todos os tipos de layout utilizados no Android.

Atualmente existem duas variações do LinearLayout, que são:
1. Horizontal -> todos os widgets adicionados dentro desse layout são colocados um do lado do outro.
2. Vertical -> todos os widgets adicionados dentro de layout são colocados um abaixo do outro.

Dentro de um LinearLayout podemos conter vários widgets, e inclusive conter outros LinearLaytouts que contenham outros widgets.

As principais propriedades do layout LinearLayout são:
1. layout_width -> largura do layout
2. layout_height -> altura do layout
3. orientation -> vertical ou horizontal
4. layout_gravity -> define se o layout será exibido no topo, rodapé, centralizado, etc...

Abaixo temos um exemplo de LinearLayut aninhado, que pode ser utilizado como base para cadastro qualquer:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/tvCodigo"
            android:layout_height="wrap_content"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:gravity="right"
            android:text="Código :" />
    
        <EditText
            android:id="@+id/etCodigo"
            android:layout_height="wrap_content"
            android:layout_width="0dp"
            android:layout_weight="4"/>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout2"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/tvNome"
            android:layout_height="wrap_content"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:gravity="right"
            android:text="Nome :" />
    
        <EditText
            android:id="@+id/etNome"
            android:layout_height="wrap_content"
            android:layout_width="0dp"
            android:layout_weight="4"/>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right">
        
        <Button
            android:id="@+id/btnConfirmar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Confirmar" />
        
        <Button
            android:id="@+id/btnCancelar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Cancelar" />
    </LinearLayout>

</LinearLayout>

Como resultado temos a seguinte imagem:


Abaixo temos uma pequena variação do exemplo acima, a mudança é que agora os botões estão alinhados ao rodapé da tela, e que também eles estão ocupando toda a largura da tela.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/tvCodigo"
            android:layout_height="wrap_content"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:gravity="right"
            android:text="Código :" />
    
        <EditText
            android:id="@+id/etCodigo"
            android:layout_height="wrap_content"
            android:layout_width="0dp"
            android:layout_weight="4"/>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout2"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/tvNome"
            android:layout_height="wrap_content"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:gravity="right"
            android:text="Nome :" />
    
        <EditText
            android:id="@+id/etNome"
            android:layout_height="wrap_content"
            android:layout_width="0dp"
            android:layout_weight="4"/>

    </LinearLayout>


    <LinearLayout
        android:id="@+id/linearLayout3"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="bottom" >
        
        <Button
            android:id="@+id/btnConfirmar"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="Confirmar" />
        
        <Button
            android:id="@+id/btnCancelar"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="Cancelar" />
    </LinearLayout>

</LinearLayout>

Como resultado temos a imagem abaixo:


O exemplo abaixo mostra como criar uma tela de menu principal ou dashboard.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:baselineAligned="false"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_vertical|center_horizontal"
    android:weightSum="6"
    android:orientation="horizontal" >
   
    <LinearLayout 
        android:id="@+id/lin1"
        android:layout_width="0dp"
        android:layout_weight="3"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dp"
            android:text="Opções:"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    
        <Button
            android:id="@+id/btnIncluir"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Incluir" />    

        <Button
            android:id="@+id/btnConsultar"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Consultar" />  

        <Button
            android:id="@+id/btnAlterar"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Alterar" />                              
        
        <Button
            android:id="@+id/btnExcluir"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Excluir" />                              
        
        </LinearLayout>
</LinearLayout>

Como resultado temos a seguinte imagem:


A seguir mais um exemplo de como criar uma tela de cadastro.
<?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:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#2a2a2a"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btnConfirmar"
            android:layout_weight="1"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Confirmar" />

        <Button
            android:id="@+id/btnCancelar"
            android:layout_weight="1" 
            android:layout_marginTop="10dp"
            android:layout_marginBottom="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Cancelar" />

    </LinearLayout>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Codigo:" />

    <EditText
        android:id="@+id/edtCodigo"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Nome:" />

    <EditText
        android:id="@+id/edtNome"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Endereço:" />

    <EditText
        android:id="@+id/edtEndereco"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>
Como resultado temos a seguinte imagem:




Esse é o início para montar uma tela em Android, em breve estarei apresentando outros tipos de layouts e quem sabe aumentando os exemplos utilizados nesse tutorial.


Posts relacionados:
RelativeLayout - http://escoladeandroid.blogspot.com.br/2012/04/android-layout-relativelayout.html


Desenvolvi o jogo Circus Puzzle Free ele é um quebra-cabeça e está publicado no Android Market, agradeço a todos que baixarem, jogarem e comentarem.



Desenv com qualidade!

quinta-feira, 29 de março de 2012

Android - ListView Parte 8

Olá, Pessoal

Estou aqui mais uma vez para apresentar mais um tipo de (ListView) Lista de Itens, agora irei mostrar como criar um separador em nossas listas.

Neste projeto terá a opção de incluir dinamicamente mais Itens ou Separadores.

Abaixo seguem todos os fontes utilizados nesse projeto, como já de costume os fontes estão todos com diversos comentários para facilitar no entendimento.

Abaixo temos uma imagem que mostra os arquivos utilizados no projeto:


Arquivo EstadoPojo.java
package br.com.empresa;

public class EstadoPojo {
    private long status;
    private String estado;
    private String capital;
    
    public EstadoPojo()
    {
    }
 
    public EstadoPojo(long pStatus, String pEstado, String pCapital)
    {
        this.status = pStatus;
        this.estado = pEstado;
        this.capital = pCapital;
    }

    public void setStatus(long status) {
        this.status = status;
    }
    public long getStatus() {
        return status;
    }
    public void setEstado(String nome) {
        this.estado = nome;
    }
    public String getEstado() {
        return estado;
    }
    public void setCapital(String endereco) {
        this.capital = endereco;
    }
    public String getCapital() {
        return capital;
    }
}

Arquivo main.java
package br.com.ListSep;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

public class main extends Activity {
    EstadosAdapter adapter;
    private List<Object> lsEstados = new ArrayList<Object>();

    /** Chamado quando a activity é chamada pela primeira vez */ 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        try{
            setContentView(R.layout.main);
            ListView list = (ListView) findViewById(R.id.lvEstados2);
            
            lsEstados.add("Norte");
            lsEstados.add(new EstadoPojo(1, "Amazonas", "Manaus")); 
            lsEstados.add(new EstadoPojo(1, "Roraima", "Boa Vista")); 
            lsEstados.add(new EstadoPojo(1, "Acre", "Rio Branco")); 
            lsEstados.add("Sudeste");
            lsEstados.add(new EstadoPojo(1, "São Paulo", "São Paulo")); 
            lsEstados.add(new EstadoPojo(1, "Minas Gerais", "Belo Horizonte"));
            lsEstados.add(new EstadoPojo(1, "Rio de Janeiro", "Rio de Janeiro"));
            lsEstados.add(new EstadoPojo(1, "Espírito Santo", "Vitória"));
            
            adapter = new EstadosAdapter(this, lsEstados);
            list.setAdapter(adapter);
            
            //aqui apenas um exemplo de que podemos inserir mais itens em nossa
            //lista, mesmo depois que já passamos o adapter para o obeto list
            lsEstados.add("Sul");
            lsEstados.add(new EstadoPojo(1, "Paraná", "Curitiba")); 
            adapter.notifyDataSetChanged();
        }catch (Exception e) {
            showToast("Erro: " + e.getMessage());
        }        
    }
    
    public void btnEstado_click(View v)
    {
        EditText etEstado = (EditText) findViewById(R.id.etEstado);
        EditText etCapital = (EditText) findViewById(R.id.etCapital);
        
        lsEstados.add(new EstadoPojo(1, etEstado.getText().toString(), etCapital.getText().toString()));
        
        /*
        Caso seja necessário incluir o item em uma posição determinada
        basta efetuar como o exemplo abaixo, apenas mudando o valor "1"
        para o valor que você desejar
        */
        //lsEstados.add(1, new EstadoPojo(1, etEstado.getText().toString(), etCapital.getText().toString()));
        
        adapter.notifyDataSetChanged();
    }
    
    public void btnCapital_click(View v)
    {
        //Cria o AlertDialog
        AlertDialog.Builder alert = new AlertDialog.Builder(this);

        alert.setTitle("Região");
        //alert.setMessage("Message");

        //Cria uma caixa de texto para ser inserida dentro do AlertDialog 
        final EditText input = new EditText(this);
        alert.setView(input);

        alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                  lsEstados.add(String.valueOf(input.getText()));
                  adapter.notifyDataSetChanged();
            }
        });

        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                //Cancelado.
            }
        });

        alert.show();    
    }
    
    private void showToast(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //Garantir que quando finalizar o programa seja
        //limpado todos os itens da coleção
        lsEstados = new ArrayList<Object>();
    }  
}

Arquivo EstadosAdapter.java
package br.com.ListSep;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class EstadosAdapter extends BaseAdapter {
    private List<Object> lsEstados;
    Context context;

    int ITEM_VIEW_ESTADO = 0;
    final int ITEM_VIEW_SEPARADOR = 1;
    final int ITEM_VIEW_COUNT = 2;    
    
    //Classe utilizada para instanciar os objetos do XML
    private LayoutInflater inflater;
    
    public EstadosAdapter(Context context, List<Object> pObjects) {
        this.lsEstados = pObjects;
        this.context = context;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public void addItem(final EstadoPojo item) {
        this.lsEstados.add(item);
        //Atualizar a lista caso seja adicionado algum item
        notifyDataSetChanged();
    }    
    
    @Override
    public int getCount() {
        return lsEstados.size();
    }

    @Override
    public Object getItem(int position) {
        return lsEstados.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getViewTypeCount() {
        return ITEM_VIEW_COUNT;
    }

    //Rotina responsável por identificar se o item da Lista
    //é um Separador ou um item "normal"
    @Override
    public int getItemViewType(int position) {
        return (lsEstados.get(position) instanceof String) ? ITEM_VIEW_SEPARADOR
                : ITEM_VIEW_ESTADO;
    }

    @Override
    public boolean isEnabled(int position) {
        //Caso o item clicado seja o Separador, nesse caso
        //não retornamos nada 
        return getItemViewType(position) != ITEM_VIEW_SEPARADOR;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        try{
            final int type = getItemViewType(position);

            if (convertView == null) {
                convertView = inflater.inflate(type == ITEM_VIEW_SEPARADOR ? 
                        R.layout.separator : R.layout.list_row, null);
            }
    
            if (type == ITEM_VIEW_SEPARADOR) {
                //Informa o texto que será exibido no Separador
                ((TextView) convertView).setText((String) getItem(position));
            } else {
                final EstadoPojo estado = (EstadoPojo) getItem(position);
                
                //Informa os valores que serão exibidos no Estado e Capital
                TextView tvEstado = (TextView) convertView.findViewById(R.id.txtEstado);
                tvEstado.setText(estado.getEstado());

                TextView tvCapital = (TextView) convertView.findViewById(R.id.txtCapital);
                tvCapital.setText(estado.getCapital());
            }
        }catch (Exception e) {
            trace("Erro : " + e.getMessage());
        }
        
        return convertView;
    }
    
    public void toast (String msg)
    {
        Toast.makeText (context, msg, Toast.LENGTH_SHORT).show ();
    } 
    
    private void trace (String msg) 
    {
        toast (msg);
    } 
}

Arquivo list_row.xml
<?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:text="Estado" 
        android:id="@+id/txtEstado" 
        android:gravity="center_vertical"
        android:layout_width="wrap_content" 
        android:layout_height="30sp">
    </TextView>
    <TextView 
        android:text="Capital" 
        android:id="@+id/txtCapital" 
        android:gravity="center_vertical"
        android:layout_width="wrap_content" 
        android:layout_height="30sp">
    </TextView>
</LinearLayout>

Arquivo main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:orientation="vertical">
    
    <EditText 
        android:inputType="text"
        android:id="@+id/etEstado" 
        android:layout_height="wrap_content"
        android:layout_width="fill_parent" 
        android:text="Estado">
    </EditText>
    
    <EditText 
        android:inputType="text"
        android:id="@+id/etCapital" 
        android:layout_height="wrap_content"
        android:layout_width="fill_parent" 
        android:text="Capital">
    </EditText>

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content" 
          android:orientation="horizontal">
        
        <Button 
            android:id="@+id/btnEstado"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" 
            android:onClick="btnEstado_click" 
            android:text="Adicionar Estado" 
            android:layout_weight="0.5">
        </Button>

        <Button 
            android:id="@+id/btnCapital"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" 
            android:onClick="btnCapital_click" 
            android:text="Adicionar Região" 
            android:layout_weight="0.5">
        </Button>
    
    </LinearLayout>
    
    <ListView
        android:id="@+id/lvEstados2" 
        android:layout_height="wrap_content" 
        android:layout_width="fill_parent">
    </ListView>
    
</LinearLayout>

Arquivo separator.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_header_title"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingTop="2dip"
    android:paddingBottom="2dip"
    android:paddingLeft="5dip"
    style="@style/listSeparatorTextViewStyle"
    android:text="Separador"
    />

Arquivo colors.xml
<?xml version="1.0" encoding="utf-8"?> 
<resources>     
    <color name="white">#fff</color>     
    <color name="black">#000</color>     
    <color name="red">#c6360a</color>     
    <color name="green">#688f2b</color>     
    <color name="orange">#f48905</color>     
    <color name="dark_blue">#003366</color>         
    <color name="grey">#888888</color> 
</resources> 

Arquivo styles.xml
<?xml version="1.0" encoding="UTF-8"?>     
<resources>     
    <style 
        name="listSeparatorTextViewStyle" parent="@android:attr/listSeparatorTextViewStyle">         
        <item name="android:layout_height">wrap_content</item>         
        <item name="android:layout_width">fill_parent</item>         
        <item name="android:textSize">15dip</item>         
        <item name="android:paddingTop">2dip</item>         
        <item name="android:paddingBottom">3dip</item>         
        <item name="android:paddingLeft">5dip</item>         
        <item name="android:paddingRight">10dip</item>         
        <item name="android:textAppearance">@android:style/TextAppearance.Small</item>         
        <item name="android:shadowColor">#111111</item>         
        <item name="android:shadowRadius">1</item>         
        <item name="android:shadowDy">1</item>         
        <item name="android:textStyle">bold</item>         
        <item name="android:textColor">@android:color/white</item>         
        <item name="android:background">@color/dark_blue</item>     
    </style>     
</resources> 


Funcionamento do programa:
1º - Clicando no botão "Adicionar Região" será exibido um AlertDialog solicitando um texto que no nosso exemplo seria uma região do Brasil, confirmando a operação o sistema irá adicionar no final da lista um Separador com o texto informando.
2º - Clicando no botão "Adicionar Estado" o sistema irá inserir um item no final da lista com os valores informados nas duas caixas de texto.

Como resultado temos a figura abaixo:
ListView






Desenvolvi o jogo Circus Puzzle Free ele é um quebra-cabeça e está publicado no Android Market, agradeço a todos que baixarem, jogarem e comentarem.



Desenv com qualidade!

sexta-feira, 16 de março de 2012

Android - ListView Parte 7

Olá,

Vou apresentar mais uma opção de lista de itens, nesse caso, atendendo a pedidos vou criar uma lista de itens e de acordo com um determinado parâmetro a cor do texto será diferente da cor padrão utilizada em todos os itens da lista.

A lista será criada com base em alguns Estados brasileiros e para isso será criada uma classe de POJO para guardar as informações de Estado, Capital e um Status.

O campo de Status servirá para identificar se o estado será pintado com uma cor diferente da cor padrão, caso o campo Status seja igual a "1" a cor dos dados será vermelha caso seja igual a "2" a cor dos dados será branca.

Será necessário criar um Adapter customizado para efetuar esse processo.

Abaixo seguem os fontes utilizados nesse projeto:

Arquivo EstadoPojo.java
package br.com.empresa;

public class EstadoPojo {
    private long status;
    private String estado;
    private String capital;
    
    public void setStatus(long status) {
        this.status = status;
    }
    public long getStatus() {
        return status;
    }
    public void setEstado(String nome) {
        this.estado = nome;
    }
    public String getEstado() {
        return estado;
    }
    public void setCapital(String endereco) {
        this.capital = endereco;
    }
    public String getCapital() {
        return capital;
    }
}

Arquivo main.java
package br.com.empresa;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;

public class main extends ListActivity {

    private SpecialAdapter mAdapter;

    public void onListItemClick(ListView parent, View v, int position, long id) {
         toast("Você clicou no item : " + String.valueOf(position));
    }    
        
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        //definindo variável do tipo EstadoPOJO
        EstadoPojo estado;
        mAdapter = new SpecialAdapter(this);

        //criando a variável estado e atribuindo os valores desejados
        estado = new EstadoPojo();
        estado.setStatus(2);
        estado.setEstado("Minas Gerais");
        estado.setCapital("Belo Horizonte");
        //adicionando o estado ao Adapter
        mAdapter.addItem(estado);

        estado = new EstadoPojo();
        estado.setStatus(2);
        estado.setEstado("Rio Grande do Sul");
        estado.setCapital("Porto Alegre");
        mAdapter.addItem(estado);

        estado = new EstadoPojo();
        estado.setStatus(1);
        estado.setEstado("Rio Grande do Norte");
        estado.setCapital("Natal");
        mAdapter.addItem(estado);

        estado = new EstadoPojo();
        estado.setStatus(2);
        estado.setEstado("Amazonas");
        estado.setCapital("Manaus");
        mAdapter.addItem(estado);

        estado = new EstadoPojo();
        estado.setStatus(1);
        estado.setEstado("Pará");
        estado.setCapital("Belém");
        mAdapter.addItem(estado);
        
        estado = new EstadoPojo();
        estado.setStatus(2);
        estado.setEstado("Paraná");
        estado.setCapital("Curitiba");
        mAdapter.addItem(estado);
        
        estado = new EstadoPojo();
        estado.setStatus(2);
        estado.setEstado("São Paulo");
        estado.setCapital("São Paulo");
        mAdapter.addItem(estado);
        
        estado = new EstadoPojo();
        estado.setStatus(2);
        estado.setEstado("Goiás");
        estado.setCapital("Goiânia");
        mAdapter.addItem(estado);
        
        estado = new EstadoPojo();
        estado.setStatus(2);
        estado.setEstado("Santa Catarina");
        estado.setCapital("Florianópolis");
        mAdapter.addItem(estado);
        
        estado = new EstadoPojo();
        estado.setStatus(2);
        estado.setEstado("Bahia");
        estado.setCapital("Salvador");
        mAdapter.addItem(estado);
        
        estado = new EstadoPojo();
        estado.setStatus(2);
        estado.setEstado("Ceará");
        estado.setCapital("Fortaleza");
        mAdapter.addItem(estado);
        
        estado = new EstadoPojo();
        estado.setStatus(1);
        estado.setEstado("Piauí");
        estado.setCapital("Teresina");
        mAdapter.addItem(estado);
        
        estado = new EstadoPojo();
        estado.setStatus(2);
        estado.setEstado("Rondônia");
        estado.setCapital("Porto Velho");
        mAdapter.addItem(estado);

        
        setListAdapter(mAdapter);
    }
    
    public void toast (String msg)
    {
        Toast.makeText (getApplicationContext(), msg, Toast.LENGTH_SHORT).show ();
    }     
}

Arquivo SpecialAdapter.java
package br.com.empresa;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class SpecialAdapter extends BaseAdapter {
     
    private List<EstadoPojo> mData = new ArrayList<EstadoPojo>();
    
    //Classe utilizada para instanciar os objetos do XML
    private LayoutInflater mInflater;
    Context context;

    public SpecialAdapter(Context context) {
        this.context = context;
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public void addItem(final EstadoPojo item) {
        mData.add(item);
        //Atualizar a lista caso seja adicionado algum item
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public EstadoPojo getItem(int position) {
        return  mData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //O ViewHolder irá guardar a instâncias dos objetos do estado_row
        ViewHolder holder;

        //Quando o objeto convertView não for nulo nós não precisaremos inflar
        //os objetos do XML, ele será nulo quando for a primeira vez que for carregado
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.main, null);

            //Cria o Viewholder e guarda a instância dos objetos
            holder = new ViewHolder();
            holder.textEstado = (TextView)convertView.findViewById(R.id.txtEstado);
            holder.textCapital = (TextView)convertView.findViewById(R.id.txtCapital);
            convertView.setTag(holder);
        } else {
            //pega o ViewHolder para ter um acesso rápido aos objetos do XML
            //ele sempre passará por aqui quando,por exemplo, for efetuado uma rolagem na tela 
            holder = (ViewHolder)convertView.getTag();
        }
        holder.textEstado.setText("Estado :" + (CharSequence) mData.get(position).getEstado());
        holder.textCapital.setText("Capital :" + (CharSequence) mData.get(position).getCapital());
        
        //Modifica a cor do texto de acordo com a propriedade Status
        if (mData.get(position).getStatus() == 1)
        {
            holder.textEstado.setTextColor(context.getResources().getColor(R.color.red));
            holder.textCapital.setTextColor(context.getResources().getColor(R.color.red));
        }else{
            holder.textEstado.setTextColor(context.getResources().getColor(R.color.white));
            holder.textCapital.setTextColor(context.getResources().getColor(R.color.white));
        }
        
        return convertView;
    }

    //Criada esta classe estática para guardar a referência dos objetos abaixo
    public static class ViewHolder {
        public TextView textEstado;
        public TextView textCapital;
    }
}

Arquivo main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView 
        android:text="TextView" 
        android:id="@+id/txtEstado" 
        android:gravity="center_vertical"
        android:layout_width="wrap_content" 
        android:layout_height="30sp">
    </TextView>
    <TextView 
        android:text="TextView" 
        android:id="@+id/txtCapital" 
        android:gravity="center_vertical"
        android:layout_width="wrap_content" 
        android:layout_height="30sp">
    </TextView>
</LinearLayout>

Como resultado temos a seguinte imagem:
ListView



Por enquanto é isso espero que tenham gostado e em breve estarei postando mais discas e tutoriais sobre listview e layout.




Desenvolvi o jogo Circus Puzzle Free ele é um quebra-cabeça e está publicado no Android Market, agradeço a todos que baixarem, jogarem e comentarem.



Desenv com qualidade!