Primeros pasos con RecyclerView

Instalación y configuración

La visualización de elementos en una lista o grillas es un patrón muy común en las aplicaciones móviles. El usuario ve una colección de elementos y puede desplazarse por ellos. La colección de elementos puede ser una lista, una cuadrícula u otra representación estructurada de datos.

El widget RecyclerView es una versión más avanzada y flexible de ListView. Este widget es un contenedor para mostrar grandes conjuntos de datos que se pueden desplazar de manera muy eficiente manteniendo un número limitado de vistas. Utilice el widget RecyclerView cuando tenga recopilaciones de datos cuyos elementos cambien en tiempo de ejecución según la acción del usuario o los eventos de la red.

La clase RecyclerView simplifica la visualización y el manejo de grandes conjuntos de datos al proporcionar:

  • Administradores de diseño para posicionar elementos.
  • Animaciones predeterminadas para operaciones de elementos comunes, como eliminación o adición de elementos

También tiene la flexibilidad de definir animaciones y administradores de diseño personalizados para los widgets RecyclerView.

ingrese la descripción de la imagen aquí

Para usar el widget RecyclerView, debe especificar un adaptador y un administrador de diseño. Para crear un adaptador, extienda la clase RecyclerView.Adapter. Los detalles de la implementación dependen de las especificaciones de su conjunto de datos y el tipo de vistas.

ingrese la descripción de la imagen aquí

Un administrador de diseño coloca las vistas de elementos dentro de un RecyclerView y determina cuándo reutilizar las vistas de elementos que ya no son visibles para el usuario. Para reutilizar (o reciclar) una vista, un administrador de diseño puede pedirle al adaptador que reemplace el contenido de la vista con un elemento diferente del conjunto de datos. Reciclar vistas de esta manera mejora el rendimiento al evitar la creación de vistas innecesarias o la realización de costosas búsquedas findViewById().

RecyclerView proporciona estos administradores de diseño incorporados:

Para crear un administrador de diseño personalizado, extienda la clase RecyclerView.LayoutManager.

Ahora, para agregar un RecyclerView, debe agregar la siguiente dependencia en su build.gradle

dependencies {
    compile 'com.android.support:recyclerview-v7:23.4.0'
}

Ahora agregue un RecyclerView en su diseño como este.

<android.support.v7.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Una vez que haya agregado un widget RecyclerView a su diseño, obtenga un identificador para el objeto, conéctelo a un administrador de diseño y adjunte un adaptador para que se muestren los datos.

public class MyActivity extends Activity {
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);
        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

        // use this setting to improve performance if you know that changes
        // in content do not change the layout size of the RecyclerView
        mRecyclerView.setHasFixedSize(true);

        // use a linear layout manager
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        // specify an adapter (see also next example)
        mAdapter = new MyAdapter(myDataset);
        mRecyclerView.setAdapter(mAdapter);
    }
    ...
}

El adaptador proporciona acceso a los elementos de su conjunto de datos, crea vistas para los elementos y reemplaza el contenido de algunas de las vistas con nuevos elementos de datos cuando el elemento original ya no está visible. El siguiente ejemplo de código muestra una implementación simple para un conjunto de datos que consta de una matriz de cadenas que se muestran mediante los widgets TextView.

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private String[] mDataset;

    // Provide a reference to the views for each data item
    // Complex data items may need more than one view per item, and
    // you provide access to all the views for a data item in a view holder
    public static class ViewHolder extends RecyclerView.ViewHolder {
        // each data item is just a string in this case
        public TextView mTextView;
        public ViewHolder(TextView v) {
            super(v);
            mTextView = v;
        }
    }

    // Provide a suitable constructor (depends on the kind of dataset)
    public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    // Create new views (invoked by the layout manager)
    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        // create a new view
        View v = LayoutInflater.from(parent.getContext())
                               .inflate(R.layout.my_text_view, parent, false);
        // set the view's size, margins, paddings and layout parameters
        ...
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        holder.mTextView.setText(mDataset[position]);

    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}

Primero agregue la biblioteca de soporte a su proyecto: dentro del archivo build.gradle de la aplicación, agregue la dependencia.

En la vista Proyecto, en &ldquo;aplicación&rdquo;, abra el archivo build.gradle