Link

RecyclerView

Pasos para implementar un RecyclerView:

1.Crea tu propia clase adaptador MyAdapter:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
...
}

El propio entorno te indicará que métodos y clases debes de implementar.

2.Para darle funcionalidad a los botones, define los listener en la subclase:

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
...
}

3.También definimos la interface para el callback:

public interface ItemClickListener {
    void onItemClick(View view, int position);
}

4.En la actividad principal es donde deberemos de utilizar nuestro adaptador:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

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

        // use a linear layout manager
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);

        // specify an adapter (see also next example)
        mAdapter = new MyAdapter(myDataSet);
        mAdapter.setClickListener(this);
        recyclerView.setAdapter(mAdapter);
    }

5.Y, obviamente, implementar la interface para el callback:

public class MainActivity extends AppCompatActivity implements MyAdapter.ItemClickListener {
...

    public void onItemClick(View view, int position) {
        Log.d("prueba", "You clicked " + mAdapter.getItem(position) + " on row number " + position);
    }
}

Para modificar el contenido de la lista tenemos a nuestra disposición varios métodos para notificar el cambio. En el ejemplo en GitHub se ha implementado un botón que añade un elemento a la lista:

    public void boton(View v) {
        myDataSet.add("Añadido");
        mAdapter.notifyDataSetChanged();
    }

En este caso simplemente se ha añadido un elemento al final; se ha modificado myDataSet y se ha notificado a mAdapter el cambio con el método notifyDataSetChanged() . Existen otros métodos para notificar otros tipos de cambios como:

  • notifyItemInserted() : INsertar un item.
  • notifyItemRangeInserted() : Insertar varios items.
  • notifyItemRemoved() : Eliminar un item.
  • notifyItemRangeRemoved() : Eliminar varios items.
  • clear() : Vaciar lista.
  • notifyDataSetChanged() : Cambio de todos los elementos.
  • notifyItemChanged() : Actualizar un item.
  • notifyItemMoved() : Mover solo un item.

Visita los siguientes enlaces para ver un ejemplo en funcionamiento: