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:
E vamos também criar um outro xml que servirá para sobrescrever as linhas da listagem que criamos, o xml linha_contato.xml:
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.
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):
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!!
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!!




