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();
        }
    }