package ua.kpi.ecampus.ui.adapter; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import ua.kpi.ecampus.R; import ua.kpi.ecampus.model.pojo.VoteTeacher; import ua.kpi.ecampus.ui.view.OnItemClickListener; import static ua.kpi.ecampus.util.TermPredicates.filter; import static ua.kpi.ecampus.util.TermPredicates.isMatchesId; /** * VotingAdapter manages VoteTeacher data model and adapts it to * RecyclerView, which is in VotingStudentActivity. * <p> * Created by Administrator on 01.06.2016. */ public class VotingAdapter extends RecyclerView.Adapter<VotingAdapter.ViewHolder> { private OnItemClickListener mListener; private List<VoteTeacher> mAllData = new ArrayList<>(); private List<VoteTeacher> mCurrentData = new ArrayList<>(); /** * Set data to adapter * * @param list */ public void setAllItems(List<VoteTeacher> list) { mAllData = list; notifyItemRangeInserted(0, list.size()); } /** * Update item in adapter * * @param item */ public void updateItem(VoteTeacher item) { int pos = getItemPosition(item); VoteTeacher adapterItem = getItem(pos); adapterItem.setCriteria(item.getCriteria()); adapterItem.setIsVoted(item.isVoted()); adapterItem.setAvgResult(item.getAvgResult()); mCurrentData.remove(pos); notifyItemRemoved(pos); mCurrentData.add(pos, adapterItem); notifyItemInserted(pos); } /** * Collect and set as current data that matches specified term * * @param termId term identifier */ public void filterByTerm(Integer termId) { mCurrentData.clear(); mCurrentData.addAll(filter(mAllData, isMatchesId(termId))); notifyItemRangeInserted(0, mCurrentData.size()); } @Override public VotingAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout .recyclerview_vote_item, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(VotingAdapter.ViewHolder holder, int position) { VoteTeacher teacher = getItem(position); holder.tvTeacherName.setText(teacher.getTeacherName()); if (!teacher.isVoted()) holder.imageVoted.setVisibility(View.INVISIBLE); else holder.imageVoted.setVisibility(View.VISIBLE); } @Override public int getItemCount() { return mCurrentData.size(); } /** * Get item by specified position * * @param pos - position * @return item */ public VoteTeacher getItem(int pos) { return mCurrentData.get(pos); } /** * Set listener which is invoked when a item is clicked. * * @param listener */ public void setOnItemClickListener(OnItemClickListener listener) { mListener = listener; } /** * Get position in adapter of item with specified id * * @param item * @return position */ private int getItemPosition(VoteTeacher item) { int position = -1; for (VoteTeacher t : mCurrentData) { position++; if (t.getTeacherId().equals(item.getTeacherId())) break; } return position; } protected class ViewHolder extends RecyclerView.ViewHolder { @Bind(R.id.tv_teacher_name) TextView tvTeacherName; @Bind(R.id.image_voted) ImageView imageVoted; public ViewHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } @OnClick(R.id.tv_feedback) public void itemClick(View view) { if (mListener != null) { int pos = getAdapterPosition(); mListener.onItemClicked(view, pos, mCurrentData.get(pos)); } } } }