Primeros pasos con RecyclerView
En esta página
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
.
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.
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:
- LinearLayoutManager muestra elementos en forma vertical u horizontal lista de desplazamiento.
- GridLayoutManager muestra elementos en una cuadrícula.
- StaggeredGridLayoutManager muestra elementos en una cuadrícula escalonada.
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.