Recicler View e viewHolder Android

Bom dia, estou tentando implementar viewHolder e ReciclerView em meu adapter, porem não consigo consigo retornar a lista com os layouts alinhados de forma correta, abaixo segue o código, se alguém tiver alguma ideia de como posso mostrar o cabeçalho e as linhas agrupadas.

package br.com.melhoroferta;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Locale;


public class AdapterLisView extends BaseAdapter {



    private final ArrayList<Produto> itens;


    private static final int TIPO_ITEM = 0;
    private static final int TIPO_ITEM2 = 1;
    private static final int TIPO_SEPARADOR = 2;

    ViewHolder1 vh1=null;
    ViewHolder2 vh2=null;

    TextView dsc1,dsc2,dsc3,dsc4,dsc5,dscestab;
    View view,view2, v;
    Activity actv;
    Context context;
    String dsc_emp = "";
    String dsc_atual = "";
    private static NumberFormat nf = NumberFormat.getCurrencyInstance(new Locale("pt","BR"));


    public AdapterLisView( ArrayList<Produto> itens, Context context) {

        this.itens = itens;
        this.context = context;
    }

    @Override
    public int getCount() {
        return itens.size();
    }

    @Override
    public Object getItem(int i) {
        return itens.get(i);
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public int getItemViewType(int position) {


        return position % 2;
    }

    @Override
    public View getView(int i,View convertView, ViewGroup viewGroup) {

        Produto produto = this.itens.get(i);



      if (convertView == null){
          LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);



          if(getItemViewType(i)==1){

              view = inflater.inflate(R.layout.itemlist_layout,null);
              vh1 = new ViewHolder1();
              vh1.txt1 = (TextView) view.findViewById(R.id.Desc1);
              vh1.txt2 = (TextView) view.findViewById(R.id.Desc2);
              vh1.txt3 = (TextView) view.findViewById(R.id.Desc3);
              vh1.txt4 = (TextView) view.findViewById(R.id.Desc4);
              vh1.txt5 = (TextView) view.findViewById(R.id.Desc5);
              view.setTag(vh1);
          }else{
              view2 = inflater.inflate(R.layout.header_layout,null);
              vh2 = new ViewHolder2();
              vh2.txt1 = (TextView) view2.findViewById(R.id.txtheader);
              view2.setTag(vh2);

              view = inflater.inflate(R.layout.itemlist_layout,null);
              vh1 = new ViewHolder1();
              vh1.txt1 = (TextView) view.findViewById(R.id.Desc1);
              vh1.txt2 = (TextView) view.findViewById(R.id.Desc2);
              vh1.txt3 = (TextView) view.findViewById(R.id.Desc3);
              vh1.txt4 = (TextView) view.findViewById(R.id.Desc4);
              vh1.txt5 = (TextView) view.findViewById(R.id.Desc5);
              view.setTag(vh1);

          }
      }else{
          if(getItemViewType(i)==1){
              vh1 = (ViewHolder1) view.getTag();
          }else{
              vh2 = (ViewHolder2) view2.getTag();
              vh1 = (ViewHolder1) view.getTag();
          }
      }
             

        if(getItemViewType(i)==1) {
            vh1.txt1.setText(produto.getDescricao1());
            vh1.txt2.setText(nf.format(produto.getValor1()));
            vh1.txt4.setText(nf.format(produto.getValor2()));
            vh1.txt3.setText(produto.getDescricao2());
            vh1.txt5.setText(String.valueOf(produto.getPercdesc()) + "%");
        }else{
            vh2.txt1.setText(produto.getEstab());

            vh1.txt1.setText(produto.getDescricao1());
            vh1.txt2.setText(nf.format(produto.getValor1()));
            vh1.txt4.setText(nf.format(produto.getValor2()));
            vh1.txt3.setText(produto.getDescricao2());
            vh1.txt5.setText(String.valueOf(produto.getPercdesc()) + "%");
        }



        if(getItemViewType(i)==1) {
            return view;
        }else{
            return view2;

        }



    }

    private static class ViewHolder1{
     public TextView txt1;
     public TextView txt2;
     public TextView txt3;
     public TextView txt4;
     public TextView txt5;
    }

    private static class ViewHolder2{
        public TextView txt1;

    }
}

//https://arthurlehdermann.wordpress.com/2013/03/11/android-criando-um-listview-personalizado/

Esta faltando o cabeçalho que quero colocar encima de cada grupo de itens.