package org.lntu.online.ui.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; 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.Student; import org.lntu.online.util.FormatUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import butterknife.BindView; import butterknife.ButterKnife; public class StudentInfoAdapter extends RecyclerView.Adapter<StudentInfoAdapter.ViewHolder> { private static final int TYPE_NORMAL = 0; private static final int TYPE_EDEX = 1; private static final int TYPE_FAMILY = 2; private static final int TYPE_ACTION = 3; private static final int TYPE_TITLE = 4; private static final int TYPE_DEEPLINE = 5; private static final int TYPE_TOP = 6; private static final int TYPE_BOTTOM = 7; private LayoutInflater inflater; private List<Integer> typeList = new ArrayList<>(); private Map<Integer, Object> sourceMap = new HashMap<>(); public StudentInfoAdapter(Context context, Student student) { inflater = LayoutInflater.from(context); setStudent(student); } public void setStudent(Student student) { if (student != null) { typeList.clear(); sourceMap.clear(); // 添加顶部边距 typeList.add(TYPE_TOP); // 添加基本信息 for (int n = 0; n < 34; n++) { String[] kv = new String[2]; switch (n) { case 0: kv[0] = "学号"; kv[1] = student.getId(); break; case 1: kv[0] = "姓名"; kv[1] = student.getName(); break; case 2: kv[0] = "英文名"; kv[1] = student.getEnglishName(); break; case 3: kv[0] = "性别"; kv[1] = student.getSex(); break; case 4: kv[0] = "国籍"; kv[1] = student.getNationality(); break; case 5: kv[0] = "民族"; kv[1] = student.getNation(); break; case 6: kv[0] = "政治面貌"; kv[1] = student.getPoliticalAffiliation(); break; case 7: kv[0] = "证件类型"; kv[1] = student.getIdCardType(); break; case 8: kv[0] = "证件号码"; kv[1] = student.getIdCardNum(); break; case 9: kv[0] = "出生日期"; kv[1] = FormatUtils.getTimeFormat(student.getBirthday()); break; case 10: kv[0] = "籍贯"; kv[1] = student.getBirthplace(); break; case 11: kv[0] = "学院"; kv[1] = student.getCollege(); break; case 12: kv[0] = "专业"; kv[1] = student.getMajor(); break; case 13: kv[0] = "班级"; kv[1] = student.getClassInfo(); break; case 14: kv[0] = "学生类型"; kv[1] = student.getStudentType(); break; case 15: kv[0] = "学籍表号"; kv[1] = student.getStudentInfoTableNum(); break; case 16: kv[0] = "考区"; kv[1] = student.getEntranceExamArea(); break; case 17: kv[0] = "准考证号码"; kv[1] = student.getEntranceExamNum(); break; case 18: kv[0] = "外语语种"; kv[1] = student.getForeignLanguage(); break; case 19: kv[0] = "培养方式"; kv[1] = student.getEducationType(); break; case 20: kv[0] = "录取证号"; kv[1] = student.getAdmissionNum(); break; case 21: kv[0] = "录取方式"; kv[1] = student.getAdmissionType(); break; case 22: kv[0] = "学生来源"; kv[1] = student.getSourceOfStudent(); break; case 23: kv[0] = "毕业学校"; kv[1] = student.getGraduateSchool(); break; case 24: kv[0] = "高考总分"; kv[1] = student.getEntranceExamScore(); break; case 25: kv[0] = "入学日期"; kv[1] = FormatUtils.getTimeFormat(student.getAdmissionTime()); break; case 26: kv[0] = "毕业日期"; kv[1] = FormatUtils.getTimeFormat(student.getGraduationTime()); break; case 27: kv[0] = "毕业去向"; kv[1] = student.getWhereaboutsAftergraduation(); break; case 28: kv[0] = "家庭地址"; kv[1] = student.getHomeAddress(); break; case 29: kv[0] = "乘车区间"; kv[1] = student.getTravelRange(); break; case 30: kv[0] = "联系电话"; kv[1] = student.getTel(); break; case 31: kv[0] = "邮政编码"; kv[1] = student.getZipCode(); break; case 32: kv[0] = "电子邮件"; kv[1] = student.getEmail(); break; case 33: kv[0] = "备注"; kv[1] = student.getRemarks(); break; } typeList.add(TYPE_NORMAL); sourceMap.put(typeList.size() - 1, kv); //添加深度线 if (n != 34 - 1) { typeList.add(TYPE_DEEPLINE); } } // 高考科目 if (student.getEntranceExams() != null && student.getEntranceExams().size() > 0) { // 添加标题 typeList.add(TYPE_TITLE); Object[] objs = new Object[2]; objs[0] = "高考科目"; objs[1] = R.drawable.student_info_ic_exam_theme_18dp; sourceMap.put(typeList.size() - 1, objs); // 添加项目 for (int n = 0; n < student.getEntranceExams().size(); n++) { typeList.add(TYPE_NORMAL); String[] kv = new String[2]; Student.EntranceExam ee = student.getEntranceExams().get(n); kv[0] = ee.getName(); kv[1] = ee.getScore(); sourceMap.put(typeList.size() - 1, kv); //添加深度线 if (n != student.getEntranceExams().size() - 1) { typeList.add(TYPE_DEEPLINE); } } } // 教育经历 if (student.getEducationExperiences() != null && student.getEducationExperiences().size() > 0) { // 添加标题 typeList.add(TYPE_TITLE); Object[] objs = new Object[2]; objs[0] = "教育经历"; objs[1] = R.drawable.student_info_ic_edex_theme_18dp; sourceMap.put(typeList.size() - 1, objs); // 添加项目 for (int n = 0; n < student.getEducationExperiences().size(); n++) { typeList.add(TYPE_EDEX); Student.EducationExperience ee = student.getEducationExperiences().get(n); sourceMap.put(typeList.size() - 1, ee); //添加深度线 if (n != student.getEducationExperiences().size() - 1) { typeList.add(TYPE_DEEPLINE); } } } // 家庭信息 if (student.getFamilys() != null && student.getFamilys().size() > 0) { // 添加标题 typeList.add(TYPE_TITLE); Object[] objs = new Object[2]; objs[0] = "家庭情况"; objs[1] = R.drawable.student_info_ic_family_theme_18dp; sourceMap.put(typeList.size() - 1, objs); // 添加项目 for (int n = 0; n < student.getFamilys().size(); n++) { typeList.add(TYPE_FAMILY); Student.Family family = student.getFamilys().get(n); sourceMap.put(typeList.size() - 1, family); //添加深度线 if (n != student.getFamilys().size() - 1) { typeList.add(TYPE_DEEPLINE); } } } // 警告处分 if (student.getDisciplinaryActions() != null && student.getDisciplinaryActions().size() > 0) { // 添加标题 typeList.add(TYPE_TITLE); Object[] objs = new Object[2]; objs[0] = "警告处分"; objs[1] = R.drawable.student_info_ic_action_theme_18dp; sourceMap.put(typeList.size() - 1, objs); // 添加项目 for (int n = 0; n < student.getDisciplinaryActions().size(); n++) { typeList.add(TYPE_ACTION); Student.DisciplinaryAction action = student.getDisciplinaryActions().get(n); sourceMap.put(typeList.size() - 1, action); //添加深度线 if (n != student.getDisciplinaryActions().size() - 1) { typeList.add(TYPE_DEEPLINE); } } } // 底部 typeList.add(TYPE_BOTTOM); } } @Override public int getItemCount() { return typeList.size(); } @Override public int getItemViewType(int position) { return typeList.get(position); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case TYPE_NORMAL: return new NormalViewHolder(inflater.inflate(R.layout.activity_student_info_item_normal, parent, false)); case TYPE_EDEX: return new EdexViewHolder(inflater.inflate(R.layout.activity_student_info_item_edex, parent, false)); case TYPE_FAMILY: return new FamilyViewHolder(inflater.inflate(R.layout.activity_student_info_item_family, parent, false)); case TYPE_ACTION: return new ActionViewHolder(inflater.inflate(R.layout.activity_student_info_item_action, parent, false)); case TYPE_TITLE: return new TitleViewHolder(inflater.inflate(R.layout.activity_student_info_item_title, parent, false)); case TYPE_DEEPLINE: return new ViewHolder(inflater.inflate(R.layout.activity_deep_line, parent, false)); case TYPE_TOP: return new ViewHolder(inflater.inflate(R.layout.activity_student_info_item_top, parent, false)); case TYPE_BOTTOM: return new ViewHolder(inflater.inflate(R.layout.activity_shadow_gap, parent, false)); default: throw new RuntimeException("Unknow view type."); } } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.update(position); } public class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(View itemView) { super(itemView); } public void update(int position) {} } public class NormalViewHolder extends ViewHolder { @BindView(R.id.tv_name) protected TextView tvName; @BindView(R.id.tv_value) protected TextView tvValue; public NormalViewHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } public void update(int position) { String[] kv = (String[]) sourceMap.get(position); tvName.setText(kv[0]); tvValue.setText(kv[1]); } } public class EdexViewHolder extends ViewHolder { @BindView(R.id.tv_date_of_start) protected TextView tvDateOfStart; @BindView(R.id.tv_date_of_end) protected TextView tvDateOfEnd; @BindView(R.id.tv_school_name) protected TextView tvSchoolName; @BindView(R.id.tv_witness) protected TextView tvWitness; public EdexViewHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } public void update(int position) { Student.EducationExperience ee = (Student.EducationExperience) sourceMap.get(position); tvDateOfStart.setText(FormatUtils.getTimeFormat(ee.getStartTime())); tvDateOfEnd.setText(FormatUtils.getTimeFormat(ee.getEndTime())); tvSchoolName.setText(ee.getSchoolInfo()); tvWitness.setText(ee.getWitness()); } } public class FamilyViewHolder extends ViewHolder { @BindView(R.id.tv_name) protected TextView tvName; @BindView(R.id.tv_relationship) protected TextView tvRelationship; @BindView(R.id.tv_political_affiliation) protected TextView tvPolAff; @BindView(R.id.tv_job) protected TextView tvJob; @BindView(R.id.tv_post) protected TextView tvPost; @BindView(R.id.tv_work_location) protected TextView tvWorkLocation; @BindView(R.id.tv_tel) protected TextView tvTel; public FamilyViewHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } public void update(int position) { Student.Family family = (Student.Family) sourceMap.get(position); tvName.setText(family.getName()); tvRelationship.setText("(" + family.getRelationship() + ")"); tvPolAff.setText(family.getPoliticalAffiliation()); tvJob.setText(family.getJob()); tvPost.setText(family.getPost()); tvWorkLocation.setText(family.getWorkLocation()); tvTel.setText(family.getTel()); } } public class ActionViewHolder extends ViewHolder { @BindView(R.id.tv_level) protected TextView tvLevel; @BindView(R.id.tv_create_time) protected TextView tvCreateTime; @BindView(R.id.tv_create_reason) protected TextView tvCreateReason; @BindView(R.id.tv_cancel_time) protected TextView tvCancelTime; @BindView(R.id.tv_cancel_reason) protected TextView tvCancelReason; @BindView(R.id.tv_state) protected TextView tvState; @BindView(R.id.tv_remarks) protected TextView tvRemarks; public ActionViewHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } public void update(int position) { Student.DisciplinaryAction action = (Student.DisciplinaryAction) sourceMap.get(position); tvLevel.setText(action.getLevel()); tvCreateTime.setText(FormatUtils.getTimeFormat(action.getCreateTime())); tvCreateReason.setText(action.getCreateReason()); tvCancelTime.setText(FormatUtils.getTimeFormat(action.getCancelTime())); tvCancelReason.setText(action.getCancelReason()); tvState.setText(action.getState()); tvRemarks.setText(action.getRemarks()); } } public class TitleViewHolder extends ViewHolder { @BindView(R.id.tv_title) protected TextView tvTitle; public TitleViewHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } public void update(int position) { Object[] objs = (Object[]) sourceMap.get(position); tvTitle.setText((String) objs[0]); tvTitle.setCompoundDrawablesWithIntrinsicBounds((int) objs[1], 0, 0, 0); } } }