77import android .widget .ImageView ;
88
99import com .koushikdutta .ion .Ion ;
10- import com .stevenschoen .imagesearcher .model .ImageResult ;
10+ import com .stevenschoen .imagesearcher .model .Image ;
1111
1212import java .util .List ;
1313
1414public class ImagesAdapter extends RecyclerView .Adapter <ImagesAdapter .ImageHolder > {
1515
16- public List <ImageResult > images ;
16+ private static final int TYPE_IMAGE = 1 ;
17+ private static final int TYPE_MORE_BUTTON = 2 ;
18+
19+ private MoreImagesCallback moreImagesCallback ;
20+
21+ public List <Image > images ;
1722
1823 private OnItemClickListener itemClickListener ;
1924
20- public ImagesAdapter (List <ImageResult > images ) {
25+ public ImagesAdapter (List <Image > images ) {
2126 super ();
2227 this .images = images ;
2328 }
2429
2530 @ Override
2631 public ImageHolder onCreateViewHolder (ViewGroup parent , int viewType ) {
27- View view = LayoutInflater . from ( parent . getContext ())
28- . inflate ( R . layout . imageresult_grid , parent , false );
32+ int layoutResourceId = R . layout . imageresult_grid ;
33+ View view = LayoutInflater . from ( parent . getContext ()). inflate ( layoutResourceId , parent , false );
2934
3035 ImageHolder holder = new ImageHolder (view );
3136 holder .root = view ;
@@ -36,34 +41,61 @@ public ImageHolder onCreateViewHolder(ViewGroup parent, int viewType) {
3641
3742 @ Override
3843 public void onBindViewHolder (final ImageHolder holder , final int position ) {
39- final ImageResult image = images .get (position );
40-
41- holder .root .setOnClickListener (new View .OnClickListener () {
42- @ Override
43- public void onClick (View v ) {
44- if (itemClickListener != null ) {
45- itemClickListener .onItemClick (holder .root , position );
46- }
47- }
48- });
49- holder .root .setOnLongClickListener (new View .OnLongClickListener () {
50- @ Override
51- public boolean onLongClick (View v ) {
52- if (itemClickListener != null ) {
53- itemClickListener .onItemLongClick (holder .root , position );
54- return true ;
55- }
56- return false ;
57- }
58- });
59-
60- Ion .with (holder .image .getContext ()).load (image .image .thumbnailLink ).withBitmap ().fadeIn (true ).intoImageView (holder .image );
61- holder .image .setContentDescription (image .title );
44+ switch (getItemViewType (position )) {
45+ case TYPE_IMAGE :
46+ final Image image = images .get (position );
47+ holder .root .setOnClickListener (new View .OnClickListener () {
48+ @ Override
49+ public void onClick (View v ) {
50+ if (itemClickListener != null ) {
51+ itemClickListener .onItemClick (holder .root , position );
52+ }
53+ }
54+ });
55+ holder .root .setOnLongClickListener (new View .OnLongClickListener () {
56+ @ Override
57+ public boolean onLongClick (View v ) {
58+ if (itemClickListener != null ) {
59+ itemClickListener .onItemLongClick (holder .root , position );
60+ return true ;
61+ }
62+ return false ;
63+ }
64+ });
65+ Ion .with (holder .image .getContext ()).load (image .thumbnailLink ).withBitmap ().fadeIn (true ).intoImageView (holder .image );
66+ holder .image .setContentDescription (image .title );
67+ break ;
68+ case TYPE_MORE_BUTTON :
69+ holder .root .setOnClickListener (new View .OnClickListener () {
70+ @ Override
71+ public void onClick (View v ) {
72+ if (moreImagesCallback != null ) {
73+ moreImagesCallback .onMoreImagesPressed ();
74+ }
75+ }
76+ });
77+ holder .root .setOnLongClickListener (null );
78+ holder .image .setImageResource (R .drawable .more );
79+ holder .image .setContentDescription ("More" );
80+ }
6281 }
6382
6483 @ Override
6584 public int getItemCount () {
66- return images .size ();
85+ if (images .isEmpty ()) {
86+ return 0 ;
87+ } else {
88+ return images .size () + 1 ;
89+ }
90+ }
91+
92+ @ Override
93+ public int getItemViewType (int position ) {
94+ if (position < images .size ()) {
95+ return TYPE_IMAGE ;
96+ } else {
97+ return TYPE_MORE_BUTTON ;
98+ }
6799 }
68100
69101 public void setOnItemClickListener (OnItemClickListener itemClickListener ) {
@@ -75,6 +107,10 @@ public interface OnItemClickListener {
75107 public void onItemLongClick (View view , int position );
76108 }
77109
110+ public void setMoreImagesCallback (MoreImagesCallback callback ) {
111+ this .moreImagesCallback = callback ;
112+ }
113+
78114 public static class ImageHolder extends RecyclerView .ViewHolder {
79115 public View root ;
80116 public ImageView image ;
@@ -83,4 +119,8 @@ public ImageHolder(View itemView) {
83119 super (itemView );
84120 }
85121 }
122+
123+ public static interface MoreImagesCallback {
124+ public void onMoreImagesPressed ();
125+ }
86126}
0 commit comments