 <p>You can do it easily by different view types. For Example - </p> <pre><code>class MyData{ String text; boolean isHeader; } public class MyAdapter extends RecyclerView.Adapter&lt;RecyclerView.ViewHolder&gt; { ArrayList&lt;MyData&gt; allData; class ViewHolder0 extends RecyclerView.ViewHolder { ... } class ViewHolder2 extends RecyclerView.ViewHolder { ... } @Override public int getItemViewType(int position) { // Just as an example, return 0 or 2 depending on list(let assume 0 for header 1 for data // Note that unlike in ListView adapters, types don't have to be contiguous return allData.get(position).isHeader?0:1; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case 0: return new ViewHolder0(header view); case 1: return new ViewHolder2(data view); ... } } } </code></pre> <p>And if data is updated then just update your dataList and call notifyDataSetChange() on the adapter.</p> <p>Hope it will help you :)</p>