how to display data in different view holder in android -
public class galleryadapter extends recyclerview.adapter<recyclerview.viewholder> { private final list<string> mlist; private final context mcontext; private final ongalleryitemclicklistener mongalleryitemclicklistener; int [] heaightsize = new int[]{1390,1390,1200,1390,1456,1456,1390,1390,1377,1390}; public galleryadapter(list<string> verticallist, context context, ongalleryitemclicklistener galleryitemclicklistener) { this.mlist = verticallist; this.mcontext = context; mongalleryitemclicklistener = galleryitemclicklistener; } private int dptopx(int px){ return (int) (px/ resources.getsystem().getdisplaymetrics().density); } @override public recyclerview.viewholder oncreateviewholder(viewgroup parent, int viewtype) { view itemview; switch (viewtype) { case 1: itemview = layoutinflater.from(parent.getcontext()) .inflate(r.layout.main_video_gallery_layout, parent, false); return new mainvideoviewholder(itemview); case 2: itemview = layoutinflater.from(parent.getcontext()) .inflate(r.layout.grid_item_layout, parent, false); return new myviewholder(itemview); } return null; } @override public void onbindviewholder(final recyclerview.viewholder holder, final int position) { int height = dptopx(heaightsize[position % 9]); if (holder instanceof mainvideoviewholder) { try { glide.with(mcontext).load((new file(mcontext.getexternalfilesdir(null) + "/" + mlist.get(position)))) .thumbnail(0.1f) .crossfade().override(500,500) .placeholder(r.drawable.placeholder) .diskcachestrategy(diskcachestrategy.result) .listener(new requestlistener<file, glidedrawable>() { @override public boolean onexception(exception e, file model, target<glidedrawable> target, boolean isfirstresource) { ((mainvideoviewholder) holder).progressbar.setvisibility(view.gone); return false; } @override public boolean onresourceready(glidedrawable resource, file model, target<glidedrawable> target, boolean isfrommemorycache, boolean isfirstresource) { ((mainvideoviewholder) holder).progressbar.setvisibility(view.gone); return false; } }) .into(((mainvideoviewholder) holder).image_main_video); } catch (runtimeexception ex) { // assume corrupt video file. } ((mainvideoviewholder) holder).text_main_video_name.settext(mlist.get(position).replace(constant.file_extension, "")); ((mainvideoviewholder) holder).text_datetime.settext(getfilecreationdate(mlist.get(position))); ((mainvideoviewholder) holder).image_main_video.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { string value = mlist.get(position); if (mongalleryitemclicklistener != null) { mongalleryitemclicklistener.ongalleryitemclicked(value); } } }); } else { try { // ((myviewholder) holder).rl_mainlayout.getlayoutparams().height=height; glide.with(mcontext).load((new file(mcontext.getexternalfilesdir(null) + "/" + mlist.get(position)))) .thumbnail(0.1f) .crossfade() .override(600, 200) .diskcachestrategy(diskcachestrategy.result) .listener(new requestlistener<file, glidedrawable>() { @override public boolean onexception(exception e, file model, target<glidedrawable> target, boolean isfirstresource) { ((myviewholder) holder).progressbar.setvisibility(view.gone); return false; } @override public boolean onresourceready(glidedrawable resource, file model, target<glidedrawable> target, boolean isfrommemorycache, boolean isfirstresource) { ((myviewholder) holder).progressbar.setvisibility(view.gone); return false; } }) .into(((myviewholder) holder).image_tumbnail); } catch (runtimeexception ex) { // assume corrupt video file. } ((myviewholder) holder).text_video_name.settext(mlist.get(position).replace(constant.file_extension, "")); ((myviewholder) holder).text_date_time.settext(getfilecreationdate(mlist.get(position))); ((myviewholder) holder).image_tumbnail.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { string value = mlist.get(position); if (mongalleryitemclicklistener != null) { mongalleryitemclicklistener.ongalleryitemclicked(value); } } }); } } @override public int getitemcount() { if (mlist == null) return 0; return mlist.size(); } @override public int getitemviewtype(int position) { if (mlist != null) { if (position == 0) { return 1; } else { return 2; } } return 0; } private string getfilecreationdate(string filename) { string filepath = mcontext.getexternalfilesdir(null) + "/" + filename; file = new file(filepath); if (from.exists()) { simpledateformat sdf = new simpledateformat("mm/dd/yyyy hh:mm:ss"); return sdf.format(new date(from.lastmodified())); } return ""; } public static class mainvideoviewholder extends recyclerview.viewholder { public final textview text_main_video_name; public final textview text_datetime; public final imageview image_main_video; public final progressbar progressbar; public mainvideoviewholder(view itemview) { super(itemview); text_main_video_name = (textview) itemview.findviewbyid(r.id.text_main); text_datetime = (textview) itemview.findviewbyid(r.id.text_datetime); image_main_video = (imageview) itemview.findviewbyid(r.id.image_main_video); progressbar=(progressbar) itemview.findviewbyid(r.id.progress); } } public class myviewholder extends recyclerview.viewholder { public final textview text_video_name; public final cardview card_containter; public final textview text_date_time; public final progressbar progressbar; private final imageview image_tumbnail; private final linearlayout rl_mainlayout; public myviewholder(view view) { super(view); text_video_name = (textview) view.findviewbyid(r.id.text_video_name); card_containter = (cardview) view.findviewbyid(r.id.card_container); text_date_time = (textview) view.findviewbyid(r.id.text_date_time); image_tumbnail = (imageview) view.findviewbyid(r.id.image_main_video); progressbar = (progressbar) itemview.findviewbyid(r.id.progress); rl_mainlayout=(linearlayout) itemview.findviewbyid(r.id.rl_main_layout); } } }
this adapter class code calling galleryadapter galleryadapter = new galleryadapter(verticallist,
galleryactivity.this, this); gridlayoutmanager verticallayoutmanager = new gridlayoutmanager(galleryactivity.this,2); verticallayoutmanager.setspansizelookup(new gridlayoutmanager.spansizelookup() { @override public int getspansize(int position) { return position == 0 ? 2 : 1; } }); rv_videolist.setlayoutmanager(verticallayoutmanager); rv_videolist.setadapter(galleryadapter);
i want set 0 position item bigger coming correct in below screen , want set position 1 medium size item , position 2,3 smaller size 4th position medium size , 5th , 6th smaller size , respectively .. current screen below
expected screen: expect postion 0 should below 2 item in 1 row:
your code long, below might key.
public int getspansize(int position) { return position == 0 ? 2 : 1; }
getspansize
should return size of cell occupy. return 2
@ position 0
grid size 2
means full width, return 1
@ other grid size 2
means half width.
if want first row have full width , after each row have 3 items size 2:1:1, grid size 4
new gridlayoutmanager(galleryactivity.this, 4);
and have spansizelookup respectively. note position
not column position position in whole item.
public int getspansize(int position) { // first item full width position 1, 4, 7... medium, other small return position == 0 ? 4 : position % 3 == 1 ? 2 : 1; }
i'm not sure correctly understood logic, hope help
Comments
Post a Comment