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>