package com.tevinjeffrey.rutgersct.ui.courseinfo; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import com.tevinjeffrey.rutgersct.R; import com.tevinjeffrey.rutgersct.ui.utils.ItemClickListener; import com.tevinjeffrey.rutgersct.ui.utils.HeaderVH; import com.tevinjeffrey.rutgersct.rutgersapi.model.Course.Section; import java.util.List; public class CourseInfoFragmentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private final List<Section> sectionList; final private ItemClickListener<Section, View> itemClickListener; final private List<View> mHeaders; private static final int TYPE_HEADER = 0; private static final int TYPE_ITEM = 1; public CourseInfoFragmentAdapter(List<View> headers, List<Section> sections, @NonNull ItemClickListener<Section, View> listener) { this.mHeaders = headers; this.itemClickListener = listener; this.sectionList = sections; setHasStableIds(true); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { final Context context = viewGroup.getContext(); if (viewType == TYPE_HEADER) { final LinearLayout parent = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.course_info_metadata_container, viewGroup, false); return HeaderVH.newInstance(parent); } else if (viewType == TYPE_ITEM) { final View parent = LayoutInflater.from(context).inflate(R.layout.section_layout, viewGroup, false); return CourseInfoVH.newInstance(parent); } return null; } @Override public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { if (holder.getItemViewType() == TYPE_HEADER && position == 0) { HeaderVH headerVH = (HeaderVH) holder; headerVH.setHeaders(mHeaders); } else if (holder.getItemViewType() == TYPE_ITEM) { CourseInfoVH courseInfoVH = (CourseInfoVH) holder; final Section section = sectionList.get(position - 1); courseInfoVH.setOpenStatus(section); courseInfoVH.setSectionNumber(section); courseInfoVH.setInstructors(section); courseInfoVH.setTimes(section); courseInfoVH.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { itemClickListener.onItemClicked(section, v); } }); } } @Override public int getItemViewType(int position) { if (position == 0) { return TYPE_HEADER; } else { return TYPE_ITEM; } } @Override public long getItemId(int position) { if (position != 0) return Long.valueOf(sectionList.get(position - 1).getIndex()); else return 0; } @Override public int getItemCount() { return sectionList.size() + 1; } }