=> RecycleView Adapter 예제
/**
* Created by cscho on 2015-08-21.
*/
public class ThemeListAdapter extends RecyclerView.Adapter<ThemeListAdapter.ThemeHolder> {
private static final String TAG = "ThemeListAdapter";
private final LayoutInflater mLayoutInflater;
private DisplayImageOptions options;
private Context mContext;
private String mSystemClock;
private ArrayList<ThemeListItem> mThemeList = null;
private SimpleImageLoadingListener mImageLoadingListener = new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
super.onLoadingCancelled(imageUri, view);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
String message = null;
switch (failReason.getType()) {
case IO_ERROR:
message = "Input/Output error";
break;
case DECODING_ERROR:
message = "Image can't be decoded";
break;
case NETWORK_DENIED:
message = "Downloads are denied";
break;
case OUT_OF_MEMORY:
message = "Out Of Memory error";
break;
case UNKNOWN:
message = "Unknown error";
break;
}
Toast.makeText(view.getContext(), message, Toast.LENGTH_SHORT).show();
}
};
public static class ThemeHolder extends RecyclerView.ViewHolder {
CSRoundedImageView civ_background;
CSRoundedImageView civ_gradeffect;
int postion;
TextView tv_title;
TextView tv_themename;
TextView tv_storycount;
public ThemeHolder(View view) {
super(view);
civ_background = (CSRoundedImageView)view.findViewById(R.id.civ_background);
civ_gradeffect = (CSRoundedImageView)view.findViewById(R.id.civ_gradeffect);
tv_title = (TextView)view.findViewById(R.id.tv_title);
tv_themename = (TextView)view.findViewById(R.id.tv_themename);
tv_storycount = (TextView)view.findViewById(R.id.tv_storycount);
}
}
public ThemeListAdapter(Context context) {
mContext = context;
mLayoutInflater = LayoutInflater.from(context);
mThemeList = new ArrayList<ThemeListItem>();
options = new DisplayImageOptions.Builder()
.resetViewBeforeLoading(true)
.delayBeforeLoading(500)
.cacheOnDisk(true)
// .imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.considerExifParams(true)
.displayer(new FadeInBitmapDisplayer(300))
.build();
}
public void setSystemClock(String clock) {
mSystemClock = clock;
}
@Override
public ThemeHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View view = mLayoutInflater.inflate(R.layout.row_theme_frame, parent, false);
return new ThemeHolder(view);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public void onBindViewHolder(ThemeHolder holder, int position) {
final View itemView = holder.itemView;
ThemeListItem item = getItem(position);
CSLog.v(TAG, "postion = " + position + " imageurl = " + item.imgurl);
int size = 0;
if ( item.type == 1 ) {
size = mContext.getResources().getDimensionPixelSize(R.dimen.theme_normal_size);
} else {
size = mContext.getResources().getDimensionPixelSize(R.dimen.theme_long_size);
}
final StaggeredGridLayoutManager.LayoutParams lp = (StaggeredGridLayoutManager.LayoutParams) itemView.getLayoutParams();
lp.height = size;
itemView.setLayoutParams(lp);
holder.setIsRecyclable(false);
holder.tv_title.setText(Html.fromHtml(item.sub_title));
holder.tv_themename.setText(item.title);
holder.tv_storycount.setText(String.valueOf(item.total_count) + mContext.getResources().getString(R.string.home_theme_storyunit));
ImageLoader.getInstance().displayImage(item.imgurl, holder.civ_background, options, mImageLoadingListener);
}
@Override
public int getItemCount() {
return mThemeList.size();
}
public void addAll(ArrayList<ThemeListItem> list) {
mThemeList.addAll(list);
notifyDataSetChanged();
}
public ThemeListItem getItem(int position) {
return mThemeList.get(position);
}
public void clear() {
mThemeList.clear();
notifyDataSetChanged();
}
}
ANDROID
댓글