List View
A ListView é um componente do Android utilizado como um contêiner para exibir uma lista de itens dispostos verticalmente, ou seja, um item abaixo do outro. Cada item da lista é representado por uma View. As listas podem ser simples ou personalizadas, dependendo das necessidades da aplicação.
O componente ListView não acessa diretamente os dados a serem exibidos. Para isso, é necessário utilizar um Adapter, que atua como uma ponte entre os dados e a interface visual. O ListAdapter, por exemplo, implementa as funcionalidades da interface Adapter e tem acesso direto aos dados que serão apresentados. Em listas simples, é possível utilizar estruturas prontas fornecidas pelo Android. Já em listas personalizadas, é necessário criar um Adapter específico para suportar os dados e o layout desejado.
Funções dos Componentes ListView: Contêiner responsável por exibir as Views que compõem a lista. Adapter: Responsável por criar e fornecer as Views exibidas na ListView, conectando os dados ao componente visual.
Tipos de Adapters Existem diferentes tipos de Adapters que podem ser utilizados com a ListView, dependendo do tipo de dado e da complexidade da interface: ArrayAdapter: Um Adapter simples que utiliza uma lista de objetos (como um ArrayList) para criar as Views. Ideal para listas simples. CursorAdapter: Projetado para trabalhar com dados provenientes de um banco de dados, como resultados de consultas. BaseAdapter: Permite a criação de Adapters personalizados, oferecendo flexibilidade para desenvolver Views com layouts e comportamentos específicos.
Para mais detalhes sobre este componente veja: GOOGLE DEVELOPERS. ListView. Disponível em: https://developer.android.com/reference/android/widget/ListView. Acesso em: 10 jul. 2025.
Exemplos práticos (lista simples)
-
string.xml
<resources> <string name="app_name">ListViewSimples</string> <string-array name="c"> <item>C é uma linguagem que usa o paradigma estruturado</item> <item>C tem uma sintaxe simples</item> <item>C é muito eficiente em termos de performance</item> </string-array> <string-array name="java"> <item>JAVA é orientada a objetos</item> <item>JAVA é multiplataforma</item> <item>JAVA é amplamente usada no desenvolvimento Android</item> </string-array> <string-array name="kotlin"> <item>Kotlin é 100% interoperável com Java</item> <item>Kotlin é concisa e expressiva</item> <item>Kotlin é usado como linguagem oficial para Android</item> </string-array> <string-array name="lua"> <item>LUA é uma linguagem embutida</item> <item>LUA tem uma sintaxe simples e fácil de aprender</item> <item>LUA é muito usada em jogos e sistemas embarcados</item> </string-array> <string-array name="pascal"> <item>PASCAL é uma linguagem estruturada</item> <item>PASCAL é usada no ensino de programação</item> <item>PASCAL é forte em tipagem e fácil de entender</item> </string-array> <string-array name="python"> <item>Python tem uma sintaxe simples e legível</item> <item>Python é amplamente usada em ciência de dados</item> <item>Python tem uma grande comunidade de desenvolvedores</item> </string-array> </resources>
-
activity_main.xml
<?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" android:padding="16dp"> <ListView android:id="@+id/listViewLinguagens" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
-
Linguagem.java
import java.util.ArrayList; public class Linguagem { private final ArrayList<String> listaLinguagens; public Linguagem() { listaLinguagens = new ArrayList<>(); preencherLista(); } private void preencherLista() { listaLinguagens.add("C"); listaLinguagens.add("JAVA"); listaLinguagens.add("KOTLIN"); listaLinguagens.add("LUA"); listaLinguagens.add("PASCAL"); listaLinguagens.add("PYTHON"); } public ArrayList<String> getListaLinguagens() { return new ArrayList<>(listaLinguagens); // Return a copy to prevent external modification } public String getLinguagem(int position) { if (position >= 0 && position < listaLinguagens.size()) { return listaLinguagens.get(position); } throw new IndexOutOfBoundsException("Invalid position: " + position); } }
-
MainActivity.java
import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; import java.util.ArrayList; public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener { private ListView listViewLinguagens; private Linguagem linguagem; private ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listViewLinguagens = findViewById(R.id.listViewLinguagens); linguagem = new Linguagem(); preencherAdapter(); listViewLinguagens.setAdapter(adapter); listViewLinguagens.setOnItemClickListener(this); listViewLinguagens.setOnItemLongClickListener(this); } private void preencherAdapter() { ArrayList<String> listaLinguagens = linguagem.getListaLinguagens(); adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, listaLinguagens); } @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { String item = adapterView.getItemAtPosition(i).toString(); abrirTela(item); } public void abrirTela(String item) { Intent intent; switch (item) { case "C": intent = new Intent(MainActivity.this, SegundaActivity.class); intent.putExtra("linguagem", "C"); startActivity(intent); break; case "JAVA": intent = new Intent(MainActivity.this, SegundaActivity.class); intent.putExtra("linguagem", "JAVA"); startActivity(intent); break; //adicionar os outros case default: Toast.makeText(this, "opção inválida", Toast.LENGTH_SHORT).show(); break; } } @Override public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) { String linguagem = adapterView.getItemAtPosition(i).toString(); Toast.makeText(this, linguagem, Toast.LENGTH_SHORT).show(); return true; } }
-
activity_segunda.xml
<?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" android:padding="10dp"> <TextView android:id="@+id/textViewCaracteristicas" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Características" android:textAppearance="@style/TextAppearance.AppCompat.Medium"/> </LinearLayout>
-
SegundaActivity.java
import android.content.Intent; import android.os.Bundle; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import java.util.HashMap; import java.util.Map; public class SegundaActivity extends AppCompatActivity { private static final Map<String, Integer> linguagemCaracteristicas = new HashMap<>(); static { linguagemCaracteristicas.put("C", R.array.c); linguagemCaracteristicas.put("JAVA", R.array.java); linguagemCaracteristicas.put("KOTLIN", R.array.kotlin); linguagemCaracteristicas.put("LUA", R.array.lua); linguagemCaracteristicas.put("PASCAL", R.array.pascal); linguagemCaracteristicas.put("PYTHON", R.array.python); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_segunda); Intent intent = getIntent(); String linguagemSelecionada = intent.getStringExtra("linguagem"); String texto = getCaracteristicas(linguagemSelecionada); TextView textViewCaracteristicas = findViewById(R.id.textViewCaracteristicas); textViewCaracteristicas.setText(texto); } public String getCaracteristicas(String linguagemSelecionada) { Integer arrayResId = linguagemCaracteristicas.get(linguagemSelecionada.toUpperCase()); if (arrayResId != null) { String[] caracteristicas = getResources().getStringArray(arrayResId); StringBuilder caracteristicasTexto = new StringBuilder(); for (String caracteristica : caracteristicas) { caracteristicasTexto.append(caracteristica).append("\n"); } return caracteristicasTexto.toString(); } return "Características não disponíveis para essa linguagem."; } }
Exemplos práticos (lista personalizada)
-
colors.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="black">#FF000000</color> <color name="white">#FFFFFFFF</color> <color name="red">#DC3737</color> </resources>
-
activity_main.xml
<?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" android:padding="10dp" > <ListView android:id="@+id/listViewItens" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@color/red" android:dividerHeight="1dp" /> </LinearLayout>
-
item_lista.xml
<?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="wrap_content" android:orientation="horizontal" android:padding="10dp" > <ImageView android:id="@+id/imagemViewItens" android:layout_width="60dp" android:layout_height="60dp" android:src="@mipmap/ic_launcher" /> <TextView android:id="@+id/textoViewItens" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center_vertical" android:textColor="@color/black" android:textAppearance="@style/TextAppearance.AppCompat.Medium" /> </LinearLayout>
-
ItemLista.java
public class ItemLista { private String nome; private int imagem; public ItemLista(String nome, int imagem) { this.nome = nome; this.imagem = imagem; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public int getImagem() { return imagem; } public void setImagem(int imagem) { this.imagem = imagem; } }
-
RepositorioItens.java
import java.util.ArrayList; import java.util.List; public class RepositorioItens { public List<ItemLista> obterItens() { List<ItemLista> itens = new ArrayList<>(); itens.add(new ItemLista("item 1", R.drawable.ic_launcher_foreground)); itens.add(new ItemLista("item 2", R.drawable.ic_launcher_foreground)); itens.add(new ItemLista("item 3", R.drawable.ic_launcher_foreground)); return itens; } }
-
MeuAdapter.java
import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.List; public class MeuAdapter extends BaseAdapter { private LayoutInflater inflater; private List<ItemLista> itens; public MeuAdapter(Context context, List<ItemLista> itens) { this.itens = itens; this.inflater = LayoutInflater.from(context); } @Override public int getCount() { return itens.size(); } @Override public ItemLista getItem(int position) { return itens.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = inflater.inflate(R.layout.item_lista, parent, false); } ItemLista item = getItem(position); TextView texto = convertView.findViewById(R.id.textoViewItens); texto.setText(item.getNome()); ImageView imagem = convertView.findViewById(R.id.imagemViewItens); imagem.setImageResource(item.getImagem()); return convertView; } }
-
MainActivity.java
import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import java.util.List; public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { private ListView listView; private MeuAdapter meuAdapter; private RepositorioItens repositorioItens; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = findViewById(R.id.listViewItens); listView.setOnItemClickListener(this); repositorioItens = new RepositorioItens(); List<ItemLista> itens = repositorioItens.obterItens(); meuAdapter = new MeuAdapter(this, itens); listView.setAdapter(meuAdapter); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ItemLista item = (ItemLista) parent.getItemAtPosition(position); Toast.makeText(this, "Você Clicou em: " + item.getNome(), Toast.LENGTH_LONG).show(); } }