Android RecyclerView ejemplo simple

El RecyclerView es una versión más avanzada del tradicional ListView y lo que hace es mostrar datos cuyos elementos se van reciclando cuando ya no son visibles por el scroll de la lista, lo que mejora la performance en gran medida.

¿Como se usa un RecyclerView?

Para usar RecyclerView tienes que definir un adaptador con un LayoutManager.

El adaptador acercará el modelo de datos para ser mostrados y el LayoutManager será el responsable de posicionar cada ítem dentro del RecyclerView y de decidir cuándo reciclar las vistas de items que ya no son visibles.

RecyclerViewFuente Google

Te muestro con un ejemplo como crear un RecyclerView, así es más simple de comprender:

Debes agregar este depencia en tu build \app\build.gradle

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

Supongamos que tienes este modelo a mostrar (en extremo simple para el propósito de este ejemplo)

public class UserModel {
...
   private String name;
}

En el layout de tu activity debes incorporar un RecyclerView

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/activity_main"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context="com.gutavopeiretti.recycleviewexample.MainActivity">

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

</RelativeLayout>

Creas otro layout con la info que deseas mostrar en el RecyclerView

Será \res\layout\user_list_row.xml, en donde tendremos un textview para mostrar el nombre y cualquier dato que quiseramos de nuestro modelo si este fuera mas complejo.


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent" android:layout_height="wrap_content">

   <TextView
       android:text="TextView"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentTop="true"
       android:layout_alignParentLeft="true"
       android:layout_alignParentStart="true"
       android:layout_marginTop="5dp"
       android:textSize="25dp"
       android:id="@+id/textUserName" />

</RelativeLayout>

Creas el Adapter

El Adapter debe extender de RecyclerView.Adapter para que usara una instancia de RecyclerView.ViewHolder.

Este ViewHolder se encargará de tomar los valores del layout.

onCreateViewHolder() será quien devuelva el ViewHolder con el layout seteado que previamente definimos \res\layout\user_list_row.xml

View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_list_row, parent, false);

onBindViewHolder() será quien se encargue de establecer los objetos en el ViewHolder

onItemCount() será quien devuelva la cantidad de items que se encuentra en la lista

public class UserAdapter extends RecyclerView.Adapter<UserAdapter.ViewHolder> {

   private List<UserModel> userModelList;

   public UserAdapter(List<UserModel> userModelList) {
       this.userModelList = userModelList;
   }

   @Override
   public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
       View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_list_row, parent, false);
       ViewHolder viewHolder = new ViewHolder(v);
       return viewHolder;
   }

   @Override
   public void onBindViewHolder(ViewHolder holder, int position) {
       String name = userModelList.get(position).getName();
       holder.name.setText(name);
   }

   @Override
   public int getItemCount() {
       return userModelList.size();
   }

   public static class ViewHolder extends RecyclerView.ViewHolder {
       private TextView name;
       public ViewHolder(View v) {
           super(v);
           name = (TextView) v.findViewById(R.id.textUserName);
       }
   }

}

Luego en la clase Activity inicias el RecyclerView

Usamos uno de los layout manager que nos define Android ‘LinearLayoutManager’ y le pasamos el adapter

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

   reyclerViewUser = (RecyclerView) findViewById(R.id.reyclerViewUser);

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

   // use a linear layout manager
   reyclerViewUser.setLayoutManager(new LinearLayoutManager(this));

   // specify an adapter with the list to show
   mAdapter = new UserAdapter(getData());
   reyclerViewUser.setAdapter(mAdapter);

}

Descarga este código completo para visualizar en Android Studio

Hi! If you find my posts helpful, please support me by inviting me for a coffee :)

Ver también