package me.storm.ninegag.ui.adapter; import android.content.Context; import android.content.res.Resources; import android.database.Cursor; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.support.v4.widget.CursorAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.android.volley.toolbox.ImageLoader; import com.etsy.android.grid.StaggeredGridView; import butterknife.ButterKnife; import butterknife.InjectView; import me.storm.ninegag.R; import me.storm.ninegag.data.ImageCacheManager; import me.storm.ninegag.model.Feed; import me.storm.ninegag.util.DensityUtils; /** * Created by storm on 14-3-26. */ public class FeedsAdapter extends CursorAdapter { private static final int[] COLORS = {R.color.holo_blue_light, R.color.holo_green_light, R.color.holo_orange_light, R.color.holo_purple_light, R.color.holo_red_light}; private static final int IMAGE_MAX_HEIGHT = 240; private LayoutInflater mLayoutInflater; private StaggeredGridView mListView; private Drawable mDefaultImageDrawable; private Resources mResource; public FeedsAdapter(Context context, StaggeredGridView listView) { super(context, null, false); mResource = context.getResources(); mLayoutInflater = LayoutInflater.from(context); mListView = listView; } @Override public Feed getItem(int position) { mCursor.moveToPosition(position); return Feed.fromCursor(mCursor); } @Override public View newView(Context context, Cursor cursor, ViewGroup viewGroup) { return mLayoutInflater.inflate(R.layout.listitem_feed, null); } @Override public void bindView(View view, Context context, Cursor cursor) { Holder holder = getHolder(view); if (holder.imageRequest != null) { holder.imageRequest.cancelRequest(); } view.setEnabled(!mListView.isItemChecked(cursor.getPosition() + mListView.getHeaderViewsCount())); Feed feed = Feed.fromCursor(cursor); mDefaultImageDrawable = new ColorDrawable(mResource.getColor(COLORS[cursor.getPosition() % COLORS.length])); holder.imageRequest = ImageCacheManager.loadImage(feed.images.normal, ImageCacheManager .getImageListener(holder.image, mDefaultImageDrawable, mDefaultImageDrawable), 0, DensityUtils.dip2px(context, IMAGE_MAX_HEIGHT)); holder.caption.setText(feed.caption); } private Holder getHolder(final View view) { Holder holder = (Holder) view.getTag(); if (holder == null) { holder = new Holder(view); view.setTag(holder); } return holder; } static class Holder { @InjectView(R.id.iv_normal) ImageView image; @InjectView(R.id.tv_caption) TextView caption; public ImageLoader.ImageContainer imageRequest; public Holder(View view) { ButterKnife.inject(this, view); } } }