RecyclerView

El RecyclerView es un elemento visual muy práctico. Es parecido al ListView, consisten en un contenedor de elementos en forma de lista. Pero la diferencia entre estos dos es que RW está pensado para optimizar el funcionamiento del ListView, reutiliza las filas cuando se hace scroll. 

<– Te dejo un enlace a la documentación oficial de Android

El uso del RecyclerView necesita los siguientes 5 puntos.

1.

La declaración

Primero hay que añadir las dependencias al build.gradle del proyecto. El RV es parte de las bibliotecas de soporte v7

dependencies {
		...
	compile 'com.android.support:appcompat-v7:26.+'
	compile 'com.android.support:design:26.+'
		...
	}

2.

Definir el RecyclerView

Segundo, hay que definir el RV en el layaout donde lo queramos colocar.

<android.support.v7.widget.RecyclerView
android:id="@+id/rView" android:layout_width="match_parent" android:layout_height="wrap_content" android:dividerHeight="2dp" android:layout_alignParentStart="true" />

3.

Definir elemento de lista

Después, se crea otro layaout que representará al elemento independientemente. En este caso, como ejemplo se usa un TextView simple.

Esta vista se irá repitiendo conforme el RV la vaya llamando.

<RelativeLayout xmlns:android=«http://schemas.android.com/apk/res/android» android:layout_width=«match_parent» android:layout_height=«match_parent»> <TextView android:id=«@+id/title» android:layout_width=«match_parent» android:layout_height=«20dp» />

</RelativeLayout>

4.

Adaptador

Se crea un adaptador en una clase que será el ViewHolder (Adaptador.java) que reutilizaremos y reciclaremos en nuestras vistas.

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;

public class Adaptador extends RecyclerView.Adapter {
private ArrayList items;
private Context context; //Creem el constructor public Adaptador(Context context, ArrayList items) { this.context = context; this.items= items; } //Crea noves files (l'invoca el layout manager). Aquí fem referència al layout fila.xml @Override public Adaptador.ElMeuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // create a new view View itemLayoutView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.file, null); // create ViewHolder ElMeuViewHolder viewHolder = new ElMeuViewHolder(itemLayoutView); return viewHolder; } //Retorna la quantitat de les dades @Override public int getItemCount() { return items.size(); } //Carreguem els widgets amb les dades (l'invoca el layout manager) @Override public void onBindViewHolder(ElMeuViewHolder viewHolder, int position) { /* * * position conté la posició de l'element actual a la llista. També l'utilitzarem * com a índex per a recòrrer les dades * */ viewHolder.vTitle.setText(items.get(position)); } //Definim el nostre ViewHolder, és a dir, un element de la llista en qüestió public static class ElMeuViewHolder extends RecyclerView.ViewHolder { //Només conté un TextView protected TextView vTitle; public ElMeuViewHolder(View v) { super(v); //El referenciem al layout vTitle = (TextView) v.findViewById(R.id.title); } } } 

5.

Al Main

Añadimos el RV en el Main de la aplicación.

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

    //Preparem la font de les dades
    ArrayList<String> dades = new ArrayList<String>();

    //Referenciem el RecyclerView
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rView);

    //afegim l'adaptador amb les dades i el LinearLayoutManager que pintarà les dades
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    Adaptador adapter = new Adaptador(this, dades);
    recyclerView.setAdapter(adapter);

    //Podem utilitzar animacions sobre la llista
    recyclerView.setItemAnimator(new DefaultItemAnimator());

    //Carreguem de dades
    for(int i = 1; i <= 30; i++){
        dades.add(new String("Dada " + i));
    }
    //Després de cada modificació a la font de les dades, hem de notificar-ho a l'adaptador
    adapter.notifyDataSetChanged();
}