Layout de la Activity

<?xml version="1.0" encoding="utf-8"?>
<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="es.javiergarciaescobedo.myapplication.MainActivity">

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

Clase Java de la Activity

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
// Requiere añadir dependencia de la librería: com.android.support:recyclerview-v7 public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private RecyclerView.Adapter mAdapter; private RecyclerView.LayoutManager mLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); 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); mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); mAdapter = new MyRecyclerViewAdapter(); mRecyclerView.setAdapter(mAdapter); } }

Layout para elementos de la lista

<!-- Crear un nuevo layout en el proyecto (sin clase Java asociada) que contenga los elementos deseados 
para cada item de la lista -->
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical">
<!-- En este ejemplo sólo se va a mostrar un texto en cada línea de la lista --> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="textView1" /> </LinearLayout>

Clase Java para adaptar los datos a la lista (RecyclerViewAdapter)

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {
    // Cambiar por una referencia a la lista real que contenga los datos
    private List<String> myArrayList = new ArrayList();

    // Crear una referencia a los elementos View (TextView, ImageView, etc)
    // por cada dato que se vaya a mostrar. En este caso sólo se va a mostrar
    // un texto, por lo que sólo hay un TextView    
    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView mTextView1;
        public ViewHolder(View v) {
            super(v);
            mTextView1 = (TextView) v.findViewById(R.id.textView1);
        }
    }

    @Override
    public MyRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                               int viewType) {
// En la siguiente línea se debe indicar el nombre que se le ha asignado al layout anterior View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_list_content, parent, false); ViewHolder vh = new ViewHolder(v); return vh; } @Override public void onBindViewHolder(ViewHolder holder, int position) { // Asociar cada elemento View con el dato a mostrar holder.mTextView1.setText(myArrayList.get(position)); } // Retorna el número de elementos de la lista @Override public int getItemCount() { return myArrayList.size(); } }

Más información

Crear listas y tarjetas (developer.android.com)