Tutorial SQLite #3 - Tela de Listagem

Boa noite!

Dando continuidade na série, hoje vamos alterar a tela inicial do nosso programa, colocando uma listagem dos contatos. Vamos criar a tela que possuirá a listagem dos contatos, activity_listagem.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/activity_vertical_margin" >
    <Button
        android:id="@+id/btCadastro"
        android:text="Cadastros"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" />
    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/btCadastro" />
</RelativeLayout>

E vamos também criar um outro xml que servirá para sobrescrever as linhas da listagem que criamos, o xml linha_contato.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="7dp" >
    <TextView
        android:id="@+id/tvTelefone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Telefone"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true" />
    <TextView
        android:id="@+id/tvNome"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:text="Nome Contato"
        android:layout_toLeftOf="@id/tvTelefone"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true" />
    <TextView
        android:id="@+id/tvEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textStyle="italic"
        android:text="email@contato.com.br"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/tvNome"
        android:layout_toLeftOf="@id/tvTelefone" />
</RelativeLayout>

Agora vamos criar uma nova classe chamada CadastroActivity e passar tudo o que tem na classe MainActivity para dar lugar a nossa listagem, que passará a ser a tela principal da nossa aplicação.
public class MainActivity extends ListActivity {

    private ContatoDAO contatoDAO;
    List contatos;
    ContatoAdapter adapter;
    BaseDAO baseDAO;
    int posicao = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_listagem);
        baseDAO = new BaseDAO(this);

        Button btCadastro = (Button) findViewById(R.id.btCadastro);
        btCadastro.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, CadastroActivity.class));
            }
        });
    }

    @Override
    protected void onResume() {
        contatoDAO = new ContatoDAO(this);
        contatoDAO.open();
        contatos = contatoDAO.lerContatos();

        adapter = new ContatoAdapter(this, contatos);
        setListAdapter(adapter);

        super.onResume();
    }

}

Bom, como vocês puderam ver, instanciei uma classe chamada ContatoAdapter, que serve para criar cada uma das linhas da listagem, e agora vamos criar esta classe (dentro da mesma pasta da classe ContatoDAO):
public class ContatoAdapter extends BaseAdapter {

    private Context context;

    private List contatos;
    private LayoutInflater inflater;

    public ContatoAdapter(Context context, List contatos) {
        super();
        this.context = context;
        this.contatos = contatos;
        this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public void notifyDataSetChanged() {
        try {
            super.notifyDataSetChanged();
        } catch (Exception e) {
            trace("Erro: " + e.getMessage());
        }
    }

    private void trace(String msg) {
        toast(msg);
    }

    public void toast(String msg) {
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
    }
   
    public int getCount() {
        return contatos.size();
    }

    public void remove(final Contato contato) {
        this.contatos.remove(contato);
    }

    public void add(final Contato contato) {
        this.contatos.add(contato);
    }

    public Object getItem(int position) {
        return contatos.get(position);
    }

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

    public View getView(int position, View convertView, ViewGroup viewGroup2) {
        try {
            Contato contato = contatos.get(position);

            ViewHolder holder;

            if (convertView == null) {
                convertView = inflater.inflate(layout.linha_contato, null);

                holder = new ViewHolder();
                holder.tvNome = (TextView) convertView.findViewById(id.tvNome
);
                holder.tvTelefone = (TextView) convertView.findViewById(id.tvTelefone);
                holder.tvEmail = (TextView) convertView.findViewById(id.tvEmail);

                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            holder.tvNome.setText(contato.getNome());
            holder.tvTelefone.setText(contato.getTelefone());
            holder.tvEmail.setText(contato.getEmail());

            return convertView;
        } catch (Exception e) {
            trace("Erro: " + e.getMessage());
        }

        return convertView;
    }

    static class ViewHolder {
        public TextView tvNome;
        public TextView tvTelefone;
        public TextView tvEmail;
    }

}

Bom, faltou apenas declarar a nova classe, (CadastroActivity), e tudo ok.
Qualquer dúvida, clique aqui para baixar o tutorial. Até a próxima postagem!!

Sobre o autor

André Luís Batista Kunde
Técnico em Informática (2004), Bacharel em Administração com ênfase em Marketing (2009), buscando ser Engenheiro de Software, Trabalhando com software educacional e me aventurando pelo mundo da programação mobile.

3 comentários:

Copyright © 2013 Aprendendo Android and Blogger Themes.