package org.lntu.online.ui.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import org.lntu.online.R; import org.lntu.online.model.entity.Grades; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; public class GradesAdapter extends RecyclerView.Adapter<GradesAdapter.ViewHolder> { private Context context; private LayoutInflater inflater; private List<Grades.CourseScore> scoreList; private List<Grades.CourseScore> maxList; private List<Grades.CourseScore> currentList; public GradesAdapter(Context context) { this.context = context; inflater = LayoutInflater.from(context); scoreList = new ArrayList<>(); maxList = new ArrayList<>(); currentList = new ArrayList<>(); } public void setScoreList(List<Grades.CourseScore> scoreList) { // 源数据 this.scoreList.clear(); this.scoreList.addAll(scoreList); // 构建最高成绩数据源 maxList.clear(); for (Grades.CourseScore score : this.scoreList) { Grades.CourseScore currentScore = null; for (Grades.CourseScore tmpScore : maxList) { if (score.getNum().equals(tmpScore.getNum())) { currentScore = tmpScore; break; } } if (currentScore == null) { maxList.add(score); } else { if (score.getScoreValue() > currentScore.getScoreValue()) { maxList.remove(currentScore); maxList.add(score); } } } // 构建当前显示数据源 currentList.clear(); for (Grades.CourseScore score : this.scoreList) { currentList.add(score); } // 更新adapter notifyDataSetChanged(); } public void updateListView(int year, String term, Grades.Level level, boolean displayMax) { currentList.clear(); for (Grades.CourseScore score : (displayMax ? maxList : scoreList)) { if (year != 0 && score.getYear() != year) { continue; } if (!TextUtils.isEmpty(term) && !score.getTerm().equals(term)) { continue; } if (level != null && score.getLevel() != level) { continue; } currentList.add(score); } notifyDataSetChanged(); } @Override public int getItemCount() { return currentList == null ? 0 : currentList.size(); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ViewHolder(inflater.inflate(R.layout.activity_grades_item, parent, false)); } @Override public void onBindViewHolder(ViewHolder holder, int position) { Grades.CourseScore score = currentList.get(position); holder.tvNum.setText(score.getNum()); holder.tvName.setText(score.getName()); holder.tvScore.setText(score.getScore()); holder.tvCredit.setText(Float.toString(score.getCredit())); holder.tvTestMode.setText(score.getTestMode()); holder.tvSelectType.setText(score.getSelectType()); holder.tvRemarks.setText(score.getRemarks()); holder.tvExamType.setText(score.getExamType()); holder.tvSemester.setText(score.getYear() + score.getTerm()); switch (score.getLevel()) { // 得分红色标记 case GREAT: holder.tvScore.setTextColor(context.getResources().getColor(R.color.score_level_great)); break; case UNPASS: holder.tvScore.setTextColor(context.getResources().getColor(R.color.score_level_unpass)); break; case NORMAL: default: holder.tvScore.setTextColor(context.getResources().getColor(R.color.score_level_normal)); break; } holder.iconVeryGood.setVisibility(score.getLevel() == Grades.Level.GREAT ? View.VISIBLE : View.GONE); } protected static class ViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.tv_num) protected TextView tvNum; @BindView(R.id.tv_name) protected TextView tvName; @BindView(R.id.tv_score) protected TextView tvScore; @BindView(R.id.tv_credit) protected TextView tvCredit; @BindView(R.id.tv_test_mode) protected TextView tvTestMode; @BindView(R.id.tv_select_type) protected TextView tvSelectType; @BindView(R.id.tv_remarks) protected TextView tvRemarks; @BindView(R.id.tv_exam_type) protected TextView tvExamType; @BindView(R.id.tv_semester) protected TextView tvSemester; @BindView(R.id.icon_very_good) protected View iconVeryGood; public ViewHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } } }