// Dependencies
    compile 'com.android.support:appcompat-v7:23.+'
    compile 'com.android.support:support-v4:23.+'
    compile 'com.android.support:design:23.+'
    compile 'com.mcxiaoke.volley:library:1.0.19'
    compile 'com.android.support:cardview-v7:23.0.+'
    compile 'com.android.support:recyclerview-v7:23.0.+'
    compile 'com.google.code.gson:gson:2.5'


// CardView xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="1dp">

    <android.support.v7.widget.CardView
        android:id="@+id/cv"
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_margin="3dp"
        android:orientation="horizontal"
        card_view:cardCornerRadius="1dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:padding="5dp">

            <com.android.volley.toolbox.NetworkImageView
                android:id="@+id/person_photo"
                android:layout_width="150dp"
                android:layout_height="150dp"
                android:scaleType="centerCrop"
                android:layout_alignParentLeft="true"
                android:layout_alignParentTop="true"
                android:layout_marginRight="16dp" />


            <TextView
                android:id="@+id/person_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_toRightOf="@+id/person_photo"
                android:textSize="30sp" />

            <TextView
                android:id="@+id/person_age"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/person_name"
                android:layout_toRightOf="@+id/person_photo" />

        </RelativeLayout>

    </android.support.v7.widget.CardView>

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

// MyAdapter
package hr.bioplanet.bioplanet.adapters;

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

import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;

import java.util.List;

import hr.bioplanet.bioplanet.MainActivity;
import hr.bioplanet.bioplanet.R;
import hr.bioplanet.bioplanet.app.AppController;
import hr.bioplanet.bioplanet.models.Recipe;

/**
 * Created by josip.bozic on 19.1.2016..
 */
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.RecipeViewHolder>{

    public static class RecipeViewHolder extends RecyclerView.ViewHolder {
        CardView cv;
        TextView name;
        TextView description;
        NetworkImageView photo;

        RecipeViewHolder(View itemView) {
            super(itemView);
            cv = (CardView)itemView.findViewById(R.id.cv);
            name = (TextView)itemView.findViewById(R.id.person_name);
            description = (TextView)itemView.findViewById(R.id.person_age);
            photo = (NetworkImageView )itemView.findViewById(R.id.person_photo);
        }
    }

    List<Recipe> list;

    public MyAdapter(List<Recipe> list){
        this.list = list;
    }

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

    @Override
    public RecipeViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cv_example, viewGroup, false);
        RecipeViewHolder pvh = new RecipeViewHolder(v);
        return pvh;
    }

    @Override
    public void onBindViewHolder(RecipeViewHolder personViewHolder, int i) {
        personViewHolder.name.setText(list.get(i).getName());
        personViewHolder.description.setText(list.get(i).getDescription());
        ImageLoader imageLoader = AppController.getInstance().getImageLoader();
        personViewHolder.photo.setImageUrl(list.get(i).getPicture(), imageLoader);
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

}


// Activity.. 
// onCreate...
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);

        getData();

// getData
private void getData(){
        String tag_json_obj = "gson_obj_req";

        String url = "http://someurl/api/mobile/recipes?populate=types&populate=tags&enabled=1";

        GsonRequest<Recipe[]> jsonObjReq = new GsonRequest<>(
                url,
                Recipe[].class,
                null,
                new Response.Listener<Recipe[]>() {

                    @Override
                    public void onResponse(Recipe[] response) {
                        recipes = Arrays.asList(response);
                        mAdapter = new MyAdapter(recipes);
                        mRecyclerView.setAdapter(mAdapter);
                    }
                }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                // hide the progress dialog
            }
        });

        AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
    }