package com.roboo.like.google.fragments; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedList; import java.util.ListIterator; import java.util.Map; import android.os.Bundle; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.roboo.like.google.R; import com.roboo.like.google.adapters.StickyGridAdapter; import com.roboo.like.google.async.PictureAsyncTaskLoader; import com.roboo.like.google.models.PictureItem; import com.roboo.like.google.staggeredgrid.StaggeredGridView; import com.roboo.like.google.views.StickyGridHeadersGridView; public class PicturePinFragment extends BaseWithProgressFragment implements LoaderCallbacks<LinkedList<PictureItem>> { private StaggeredGridView mGridView; public static PicturePinFragment newInstance() { PicturePinFragment fragment = new PicturePinFragment(); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_picture_pin, null); mGridView = (StaggeredGridView) view.findViewById(R.id.sgv_gridview); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getActivity().getSupportLoaderManager().initLoader(1, null, this); } public Loader<LinkedList<PictureItem>> onCreateLoader(int id, Bundle args) { return new PictureAsyncTaskLoader(getActivity()); } @Override public void onLoadFinished(Loader<LinkedList<PictureItem>> loader, LinkedList<PictureItem> data) { if (null != data) { LinkedList<PictureItem> dataWrapper = generateHeaderId(data); Collections.sort(dataWrapper, new YMDComparator()); // 排序 mGridView.setAdapter(new StickyGridAdapter(getActivity(), dataWrapper)); } mProgressBar.setVisibility(View.GONE); } @Override public void onLoaderReset(Loader<LinkedList<PictureItem>> loader) {} /** * 对GridView的Item生成HeaderId, 根据图片的添加时间的年、月、日来生成HeaderId 年、月、日相等HeaderId就相同 * * @param nonHeaderIdList * @return */ private LinkedList<PictureItem> generateHeaderId(LinkedList<PictureItem> nonHeaderIdList) { Map<String, Integer> mHeaderIdMap = new HashMap<String, Integer>(); int mHeaderId = 1; LinkedList<PictureItem> hasHeaderIdList; for (ListIterator<PictureItem> it = nonHeaderIdList.listIterator(); it.hasNext();) { PictureItem item = it.next(); String ymd = item.getTime(); if (!mHeaderIdMap.containsKey(ymd)) { item.setHeaderId(mHeaderId); mHeaderIdMap.put(ymd, mHeaderId); mHeaderId++; } else { item.setHeaderId(mHeaderIdMap.get(ymd)); } } hasHeaderIdList = nonHeaderIdList; return hasHeaderIdList; } public class YMDComparator implements Comparator<PictureItem> { public int compare(PictureItem o1, PictureItem o2) { return o1.getTime().compareTo(o2.getTime()); } } }