Heterogenous Recyclerview

Posted By : Ankita Singh | 28-May-2016

Recyclerview can also be used too inflate multiple layouts or view types where you want two or more type of layout or item view.To implement heterogenous layouts in recyclerview you have to override the method

  1. getItemViewType()
  2. onCreateViewHolder()
  3. onBindViewHolder()

I am going to write the adapter for the heterogeneous recyclerview for this you have to extend the Recyclerview.adapter and implement all the three method which i have written above.....here i m going to write a code for inflating the different item at even position and different item at odd position,

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

    ArrayList<DefaultCategoryPojo> defaultCategoryList;
    OnViewClickListener onViewClickListener;
    private final int TYPE_ODD = 271;
    private final int TYPE_EVEN = 270;

    public DefaultCategoryAdapter(ArrayList<DefaultCategoryPojo> defaultCategoryList, OnViewClickListener onViewClickListener) {
        this.defaultCategoryList = defaultCategoryList;
        this.onViewClickListener = onViewClickListener;
    }

    @Override
    public int getItemViewType(int position) {
        if ((position % 2) == 0) {
            viewType = TYPE_EVEN;
        } else {
            viewType = TYPE_ODD;
        }
        return viewType;
    }


    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view;
        RecyclerView.ViewHolder viewHolder = null;
        switch (viewType) {
            case TYPE_EVEN:
                view = LayoutInflater.from(parent.getContext()).inflate(R.layout.default_category_even_item, parent, false);
                viewHolder = new EvenRowHolder(view);
                break;
            case TYPE_ODD:
                view = LayoutInflater.from(parent.getContext()).inflate(R.layout.default_category_odd_item, parent, false);
                viewHolder = new OddRowHolder(view);
                break;
        }
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        DefaultCategoryPojo defaultCategoryPojo = defaultCategoryList.get(position);
        switch (holder.getItemViewType()) {
            case TYPE_EVEN:
                evenItems(holder, position, defaultCategoryPojo);
                break;
            case TYPE_ODD:
                oddItems(holder, position, defaultCategoryPojo);
                break;
            default:
                break;
        }
    }

    private void evenItems(RecyclerView.ViewHolder holder, final int position, DefaultCategoryPojo defaultCategoryPojo) {
        final EvenRowHolder evenRowHolder = (EvenRowHolder) holder;
        evenRowHolder.categoryCard.setCardElevation(10);
        evenRowHolder.categoryText.setText(defaultCategoryPojo.getCategoryText());
        evenRowHolder.categoryImage.setImageDrawable(defaultCategoryPojo.getCategoryImage());
        //    evenRowHolder.floatingChooser.setBackgroundTintList(ColorStateList.valueOf(Color.RED));
        evenRowHolder.floatingChooser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onViewClickListener.setOnViewClickListner(evenRowHolder.floatingChooser, position);
            }
        });
    }

    private void oddItems(RecyclerView.ViewHolder holder, final int position, DefaultCategoryPojo defaultCategoryPojo) {
        final OddRowHolder oddRowHolder = (OddRowHolder) holder;
        oddRowHolder.categoryCard.setCardElevation(10);
        oddRowHolder.categoryText.setText(defaultCategoryPojo.getCategoryText());
        oddRowHolder.categoryImage.setImageDrawable(defaultCategoryPojo.getCategoryImage());
//        oddRowHolder.floatingChooser.setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
        oddRowHolder.floatingChooser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onViewClickListener.setOnViewClickListner(oddRowHolder.floatingChooser, position);
            }
        });
    }

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

About Author

Author Image
Ankita Singh

Ankita is an Android Application Developer. She has experience in developing android application by using Java and xml.

Request for Proposal

Name is required

Comment is required

Sending message..