Created
April 22, 2014 04:54
-
-
Save snadjafi/11165705 to your computer and use it in GitHub Desktop.
ResourceCursorAdapter With ViewHolder
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.content.Context; | |
import android.database.Cursor; | |
import android.graphics.Bitmap; | |
import android.provider.MediaStore; | |
import android.util.Log; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.widget.ImageView; | |
import android.widget.ResourceCursorAdapter; | |
import android.widget.TextView; | |
import com.clipo.blipo.R; | |
import com.clipo.blipo.models.BlipoPhoto; | |
import com.google.common.collect.Lists; | |
import java.util.List; | |
public class PhotoCursorAdapter extends ResourceCursorAdapter { | |
//region Variables | |
private final static String DEBUG_TAG = "[PhotoCursorAdapter]"; | |
private final List<BlipoPhoto> selectedPhotos; | |
private final List<Bitmap> downloadedThumbnails; | |
private final int cursorCount; | |
//endregion | |
//region Constructor | |
public PhotoCursorAdapter(Context context, int layout, Cursor c, int flags, List<BlipoPhoto> selectedPhotos) { | |
super(context, layout, c, flags); | |
this.selectedPhotos = selectedPhotos; | |
this.cursorCount = c.getCount(); | |
this.downloadedThumbnails = Lists.newArrayList(); | |
} | |
//endregion | |
@Override | |
public void bindView(View view, Context context, Cursor cursor) { | |
Log.w(DEBUG_TAG, "bindView()"); | |
final ViewHolder viewHolder = (ViewHolder) view.getTag(); | |
// Log.d(DEBUG_TAG, "======================"); | |
// Log.d(DEBUG_TAG, "Cursor position = " + cursor.getPosition()); | |
// Log.d(DEBUG_TAG, "Cursor count = " + cursor.getCount()); | |
// Log.d(DEBUG_TAG, "Original count = " + cursorCount); | |
// Log.d(DEBUG_TAG, "Adapter count = " + getCount()); | |
if (cursor.getPosition() < cursorCount) { | |
final long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID)); | |
if (isPhotoSelected(id)) { | |
viewHolder.selectedImageView.setBackgroundResource(R.drawable.list_focused_blipo_default); | |
} else { | |
viewHolder.selectedImageView.setBackgroundResource(android.R.drawable.screen_background_light_transparent); | |
} | |
Bitmap thumbnail = MediaStore.Images.Thumbnails.getThumbnail( | |
context.getContentResolver(), | |
id, | |
MediaStore.Images.Thumbnails.MINI_KIND, | |
null); | |
viewHolder.photoImageView.setImageBitmap(thumbnail); | |
} else { | |
// Log.d(DEBUG_TAG, "downloadedThumbnails.get(getCount() - cursorCount - 1) " + (getCount() - cursorCount - 1)); | |
viewHolder.photoImageView.setImageBitmap(downloadedThumbnails.get(getCount() - cursorCount - 1)); | |
} | |
// Log.d(DEBUG_TAG, "======================"); | |
} | |
@Override | |
public View newView(Context context, Cursor cursor, ViewGroup parent) { | |
Log.w(DEBUG_TAG, "newView()"); | |
View view = super.newView(context, cursor, parent); | |
ViewHolder viewHolder = new ViewHolder(); | |
viewHolder.photoImageView = (ImageView) view.findViewById(R.id.photo_iv); | |
viewHolder.selectedImageView = (ImageView) view.findViewById(R.id.selected_iv); | |
view.setTag(viewHolder); | |
return view; | |
} | |
@Override | |
public void changeCursor(Cursor cursor) { | |
Log.w(DEBUG_TAG, "changeCursor()"); | |
super.changeCursor(cursor); | |
} | |
@Override | |
public Cursor getCursor() { | |
Log.w(DEBUG_TAG, "getCursor()"); | |
return super.getCursor(); | |
} | |
@Override | |
public Cursor swapCursor(Cursor newCursor) { | |
Log.w(DEBUG_TAG, "swapCursor()"); | |
return super.swapCursor(newCursor); | |
} | |
@Override | |
public int getCount() { | |
return cursorCount + downloadedThumbnails.size() + 1; | |
} | |
public void addSelectedPhoto(long photoId) { | |
selectedPhotos.add(new BlipoPhoto(photoId)); | |
} | |
public void removeSelectedPhoto(long photoId) { | |
selectedPhotos.remove(new BlipoPhoto(photoId)); | |
} | |
public boolean isPhotoSelected(long photoId) { | |
return selectedPhotos.contains(new BlipoPhoto(photoId)); | |
} | |
public List<BlipoPhoto> getSelectedPhotos() { | |
return selectedPhotos; | |
} | |
public void addThumbnails(Bitmap bitmap) { | |
this.downloadedThumbnails.add(bitmap); | |
} | |
final static class ViewHolder { | |
public ImageView photoImageView; | |
public ImageView selectedImageView; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment