package net.coding.program.project.git; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.SectionIndexer; import android.widget.TextView; import net.coding.program.R; import net.coding.program.common.Global; import net.coding.program.common.comment.BaseCommentParam; import net.coding.program.login.auth.Utilities; import net.coding.program.model.Commit; import net.coding.program.project.detail.ProjectDynamicFragment; import net.coding.program.project.detail.merge.SimpleData1Adaper; import java.util.ArrayList; import java.util.Calendar; import se.emilsjolander.stickylistheaders.StickyListHeadersAdapter; /** * Created by chenchao on 15/5/29. */ public class CommitsAdapter extends SimpleData1Adaper<Commit> implements StickyListHeadersAdapter, SectionIndexer { String sToday = ""; String sYesterday = ""; private ArrayList<Long> mSectionTitle = new ArrayList<>(); private ArrayList<Integer> mSectionId = new ArrayList<>(); public CommitsAdapter(BaseCommentParam param) { super(param); Calendar calendar = Calendar.getInstance(); Long today = calendar.getTimeInMillis(); sToday = Global.mDateFormat.format(today); Long yesterday = calendar.getTimeInMillis() - 1000 * 60 * 60 * 24; sYesterday = Global.mDateFormat.format(yesterday); } @Override public Object[] getSections() { return mSectionTitle.toArray(); } @Override public int getPositionForSection(int sectionIndex) { return sectionIndex; } @Override public int getSectionForPosition(int position) { for (int i = 0; i < mSectionId.size(); ++i) { if (position < mSectionId.get(i)) { return i - 1; } } return mSectionId.size() - 1; } @Override public View getHeaderView(int position, View convertView, ViewGroup parent) { HeaderViewHolder holder; if (convertView == null) { holder = new HeaderViewHolder(); convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.commit_list_section, parent, false); holder.mHead = (TextView) convertView.findViewById(R.id.sectionTitle); convertView.setTag(holder); } else { holder = (HeaderViewHolder) convertView.getTag(); } Long time = mSectionTitle.get(getSectionForPosition(position)); String s = Global.mDateFormat.format(time); if (s.equals(sToday)) { s += " (今天)"; } else if (s.equals(sYesterday)) { s += " (昨天)"; } holder.mHead.setText(s); return convertView; } @Override public long getHeaderId(int i) { return getSectionForPosition(i); } public void initSection() { mSectionTitle.clear(); mSectionId.clear(); if (getCount() > 0) { mSectionId.add(0); Calendar lastTime = Calendar.getInstance(); lastTime.setTimeInMillis(((Commit) getItem(0)).getCommitTime()); Calendar nowTime = Calendar.getInstance(); mSectionTitle.add(lastTime.getTimeInMillis()); for (int i = 0; i < getCount(); ++i) { nowTime.setTimeInMillis(((Commit) getItem(i)).getCommitTime()); if (Utilities.isDifferentDay(lastTime, nowTime)) { lastTime.setTimeInMillis(nowTime.getTimeInMillis()); mSectionTitle.add(lastTime.getTimeInMillis()); mSectionId.add(i); } } } } @Override public void resetData(ArrayList data) { super.resetData((ArrayList<Object>) data); initSection(); notifyDataSetChanged(); } @Override public void notifyDataSetChanged() { initSection(); super.notifyDataSetChanged(); } class HeaderViewHolder { TextView mHead; } }