Android - ListView Customizada

De Aulas

Links Relacionados: Dispositivos Móveis

Recursos

icons_custom_listview.zip

Descrição

Criar uma Empty Activity com uma listView

activity_main.xml

 1<?xml version="1.0" encoding="utf-8"?>
 2<android.support.constraint.ConstraintLayout
 3    xmlns:android="http://schemas.android.com/apk/res/android"
 4    xmlns:app="http://schemas.android.com/apk/res-auto"
 5    xmlns:tools="http://schemas.android.com/tools"
 6    android:layout_width="match_parent"
 7    android:layout_height="match_parent"
 8    tools:context="com.saulopz.customlistviewa.MainActivity">
 9
10    <ListView
11        android:id="@+id/listView"
12        android:layout_width="368dp"
13        android:layout_height="495dp"
14        app:layout_constraintTop_toTopOf="parent"
15        android:layout_marginTop="8dp"
16        android:layout_marginRight="8dp"
17        app:layout_constraintRight_toRightOf="parent"
18        android:layout_marginLeft="8dp"
19        app:layout_constraintLeft_toLeftOf="parent"
20        app:layout_constraintBottom_toBottomOf="parent"
21        android:layout_marginBottom="8dp"/>
22</android.support.constraint.ConstraintLayout>

my_list.xml

Criar um layout para ser utilizado como elementos da listview;

 1<?xml version="1.0" encoding="utf-8"?>
 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3              xmlns:app="http://schemas.android.com/apk/res-auto"
 4              android:layout_width="match_parent"
 5              android:layout_height="match_parent"
 6              android:orientation="horizontal">
 7
 8    <ImageView
 9        android:id="@+id/imageView"
10        android:layout_width="50dp"
11        android:layout_height="50dp"
12        app:srcCompat="@drawable/java"/>
13
14    <LinearLayout
15        android:layout_width="match_parent"
16        android:layout_height="50dp"
17        android:orientation="vertical">
18
19        <TextView
20            android:id="@+id/textViewNome"
21            android:layout_width="match_parent"
22            android:layout_height="wrap_content"
23            android:layout_weight="1"
24            android:text="Nome"
25            android:textSize="24sp"/>
26
27        <TextView
28            android:id="@+id/textViewTelefone"
29            android:layout_width="match_parent"
30            android:layout_height="wrap_content"
31            android:layout_weight="1"
32            android:text="Telefone"
33            android:textAlignment="textEnd"/>
34    </LinearLayout>
35</LinearLayout>

Contato.java

 1package com.saulopz.customlistviewa;
 2
 3class Contato {
 4	String nome;
 5	String fone;
 6	int imagem;
 7
 8	Contato(String n, String  f, int i) {
 9		nome = n;
10		fone = f;
11		imagem = i;
12	}
13}

ListAdapter.java

Para que possamos utilizar uma ListView customizada, é necessário implementarmos nosso próprio adapter para ela.

 1package com.saulopz.customlistviewa;
 2
 3import android.app.Activity;
 4import android.view.View;
 5import android.view.ViewGroup;
 6import android.widget.BaseAdapter;
 7import android.widget.ImageView;
 8import android.widget.TextView;
 9
10import java.util.List;
11
12
13class ListAdapter extends BaseAdapter {
14	private final List<Contato> contatos;
15	private final Activity activity;
16
17	ListAdapter(List<Contato> contatos, Activity activity) {
18		this.contatos = contatos;
19		this.activity = activity;
20	}
21
22	@Override
23	public int getCount() {
24		return contatos.size();
25	}
26
27	@Override
28	public Object getItem(int i) {
29		return contatos.get(i);
30	}
31
32	@Override
33	public long getItemId(int i) {
34		return 0;
35	}
36
37	@Override
38	public View getView(int i, View view, ViewGroup viewGroup) {
39		View v = view;
40		if (v == null) {
41			v = activity.getLayoutInflater().inflate(R.layout.my_list, viewGroup, false);
42		}
43		Contato contato = contatos.get(i);
44		TextView name = (TextView) v.findViewById(R.id.textViewNome);
45		TextView fone = (TextView) v.findViewById(R.id.textViewTelefone);
46		ImageView imagem = (ImageView) v.findViewById(R.id.imageView);
47		name.setText(contato.nome);
48		fone.setText(contato.fone);
49		switch (contato.imagem) {
50			case 0:
51				imagem.setImageResource(R.drawable.java);
52				break;
53			case 1:
54				imagem.setImageResource(R.drawable.c);
55				break;
56			case 2:
57				imagem.setImageResource(R.drawable.go);
58				break;
59		}
60		return v;
61	}
62}

MainActivity.java

 1package com.saulopz.customlistviewa;
 2
 3import android.os.Bundle;
 4import android.support.v7.app.AppCompatActivity;
 5import android.widget.ArrayAdapter;
 6import android.widget.BaseAdapter;
 7import android.widget.ListView;
 8
 9import java.util.ArrayList;
10import java.util.List;
11
12public class MainActivity extends AppCompatActivity {
13	ListView listView;
14	List<Contato> contatos = new ArrayList<>();
15	BaseAdapter adapter;
16
17	@Override
18	protected void onCreate(Bundle savedInstanceState) {
19		super.onCreate(savedInstanceState);
20		setContentView(R.layout.activity_main);
21
22		contatos.add(new Contato("Andre", "9234234", 0));
23		contatos.add(new Contato("Beatriz", "1235134", 1));
24		contatos.add(new Contato("Carla", "3323423", 2));
25
26		adapter = new ListAdapter(contatos, this);
27		listView = (ListView) findViewById(R.id.listView);
28		listView.setAdapter(adapter);
29	}
30}

Atividade

  • Faça um aplicativo e crie uma ListView customizada.
  • Gerencie os dados adicionando novas informações com um botão adicionar na activity main.
  • Quando clicar no botão adicionar, abre uma nova activity, insere os dados e quando clicar em gravar, adiciona as informações na ListView da activity main.
  • Quando clicar no item da listview, mostra as informações editadas em uma janelinha de dialogo.
  • Quando segurar clicado um item da listview, exclui o item.