Multiple data in an ArrayAdapter

1

To make a list with a data with ArrayAdapter I do so:

ArrayList<String> palavras = new ArrayList<>();
int a = 0;
for(int i = 0;i<50;i++) {
    a++;
    palavras.add(Integer.toString(a));
}

ArrayAdapter<String> adapter = new ArrayAdapter<>(
            getApplicationContext(),R.layout.lay,palavras);

ListView lista = (ListView) findViewById(R.id.lista);
lista.setAdapter(adapter);

But when do I want to add more than one item to the list?

How do I insert 2 or more data into ArrayAdapter ?

For example, if I want to display a title list above and subtitle below

    
asked by anonymous 27.02.2017 / 18:07

1 answer

1

To do this you need to create a% custom%, and an object to encapsulate the information it will show in the list:

Example of the object we are going to work on ArrayAdapter :

class ItemLista{
    String titulo;
    String subTitulo;
}

In this ArrayAdapter you must inform the type of the object that we are going to work:

class AdapterCustomizado extends ArrayAdapter<ItemLista>

Here is the complete example:

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private ListView listaCustomizada;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listaCustomizada = ListView.class.cast(findViewById(R.id.listaCustomizada));

        final List<ItemLista> itens = loadList();
        /**
         * Criamos o adapter e adicionamos a lista
         */

        final AdapterCustomizado adapterCustomizado = new AdapterCustomizado(getApplicationContext(), itens);
        listaCustomizada.setAdapter(adapterCustomizado);
    }

    /**
     * Método auxiliar que carrega a lista com exemplos
     */
    private List<ItemLista> loadList(){
        //Lista de objetos que vamos exibir na lista
        final List<ItemLista> itens = new ArrayList<>(0);
        int pt = 0;
        while(pt != 10){
            final ItemLista itemLista = new ItemLista();
            itemLista.titulo =" Item #"+pt;
            itemLista.subTitulo =   "Sub titulo do item "+pt;
            itens.add(itemLista);
            pt++;
        }
        return itens;
    }


    /**
     * Objeto utilizado pelo ArrayAdapter
     */
    class ItemLista{
        String titulo;
        String subTitulo;
    }

    /**
     * Este é o ArrayAdapter Customizado, este irá trabalhar com um objeto ItemLista
     */
    class AdapterCustomizado extends ArrayAdapter<ItemLista>{

        public AdapterCustomizado(@NonNull Context context, final List<ItemLista> itens) {
            /**
             * Passamos ao contrutor o Context, o id do adapter que vamos utilizar
             * e a lista com os objetos
             */
            super(context, R.layout.adapter_customizado, itens);
        }

        @NonNull
        @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            /**
             * Carregamos a view com o layout...
             */
            convertView = getLayoutInflater().inflate(R.layout.adapter_customizado, parent, false);

            /**
             * Vamos carregar os componentes do adapter
             */
            TextView tituloTxt = TextView.class.cast(convertView.findViewById(R.id.name));
            TextView subTituloTxt = TextView.class.cast(convertView.findViewById(R.id.timestamp));

            /**
             * Vamos carregar objeto que será exibido,
             * para isso usamos o método getItem e como parametro a posição
             */
            final ItemLista item = getItem(position);

            tituloTxt.setText(item.titulo);
            subTituloTxt.setText(item.subTitulo);

            return convertView;

        }
    }
}

adapter_customized.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <TextView
        android:id="@+id/titulo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:textAlignment="center"
        android:textSize="24sp"
        android:textStyle="bold"
        tools:layout_editor_absoluteX="86dp"
        tools:layout_editor_absoluteY="31dp" />

    <TextView
        android:layout_margin="5dp"
        android:id="@+id/subTitulo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/titulo"
        android:layout_alignStart="@+id/titulo" />


</LinearLayout>
    
27.02.2017 / 22:17