Skip to content

Commit ff06517

Browse files
authored
Merge pull request ethanhua#22 from blazvantur/master
Added feature for multi items support on RecyclerView.
2 parents b5ea9bb + 5407e8b commit ff06517

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

library/src/main/java/com/ethanhua/skeleton/RecyclerViewSkeletonScreen.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.ethanhua.skeleton;
22

3+
import android.support.annotation.ArrayRes;
34
import android.support.annotation.ColorRes;
45
import android.support.annotation.IntRange;
56
import android.support.annotation.LayoutRes;
@@ -23,6 +24,7 @@ private RecyclerViewSkeletonScreen(Builder builder) {
2324
mSkeletonAdapter = new SkeletonAdapter();
2425
mSkeletonAdapter.setItemCount(builder.mItemCount);
2526
mSkeletonAdapter.setLayoutReference(builder.mItemResID);
27+
mSkeletonAdapter.setArrayOfLayoutReferences(builder.mItemsResIDArray);
2628
mSkeletonAdapter.shimmer(builder.mShimmer);
2729
mSkeletonAdapter.setShimmerColor(builder.mShimmerColor);
2830
mSkeletonAdapter.setShimmerAngle(builder.mShimmerAngle);
@@ -49,6 +51,7 @@ public static class Builder {
4951
private boolean mShimmer = true;
5052
private int mItemCount = 10;
5153
private int mItemResID = R.layout.layout_default_item_skeleton;
54+
private int[] mItemsResIDArray;
5255
private int mShimmerColor;
5356
private int mShimmerDuration = 1000;
5457
private int mShimmerAngle = 20;
@@ -118,6 +121,14 @@ public Builder load(@LayoutRes int skeletonLayoutResID) {
118121
return this;
119122
}
120123

124+
/**
125+
* @param skeletonLayoutResIDs the loading array of skeleton layoutResID
126+
*/
127+
public Builder loadArrayOfLayouts(@ArrayRes int[] skeletonLayoutResIDs) {
128+
this.mItemsResIDArray = skeletonLayoutResIDs;
129+
return this;
130+
}
131+
121132
/**
122133
* @param frozen whether frozen recyclerView during skeleton showing
123134
* @return

library/src/main/java/com/ethanhua/skeleton/SkeletonAdapter.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class SkeletonAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
1515

1616
private int mItemCount;
1717
private int mLayoutReference;
18+
private int[] mLayoutArrayReferences;
1819
private int mColor;
1920
private boolean mShimmer;
2021
private int mShimmerDuration;
@@ -23,9 +24,13 @@ public class SkeletonAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
2324
@Override
2425
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
2526
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
27+
if (doesArrayOfLayoutsExist()) {
28+
mLayoutReference = viewType;
29+
}
2630
if (mShimmer) {
2731
return new ShimmerViewHolder(inflater, parent, mLayoutReference);
2832
}
33+
2934
return new RecyclerView.ViewHolder(inflater.inflate(mLayoutReference, parent, false)) {
3035
};
3136
}
@@ -41,6 +46,19 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
4146
}
4247
}
4348

49+
@Override
50+
public int getItemViewType(int position) {
51+
if(doesArrayOfLayoutsExist()) {
52+
return getCorrectLayoutItem(position);
53+
}
54+
return super.getItemViewType(position);
55+
}
56+
57+
@Override
58+
public long getItemId(int position) {
59+
return position;
60+
}
61+
4462
@Override
4563
public int getItemCount() {
4664
return mItemCount;
@@ -50,6 +68,10 @@ public void setLayoutReference(int layoutReference) {
5068
this.mLayoutReference = layoutReference;
5169
}
5270

71+
public void setArrayOfLayoutReferences(int[] layoutReferences) {
72+
this.mLayoutArrayReferences = layoutReferences;
73+
}
74+
5375
public void setItemCount(int itemCount) {
5476
this.mItemCount = itemCount;
5577
}
@@ -69,4 +91,15 @@ public void setShimmerDuration(int shimmerDuration) {
6991
public void setShimmerAngle(@IntRange(from = 0, to = 30) int shimmerAngle) {
7092
this.mShimmerAngle = shimmerAngle;
7193
}
94+
95+
public int getCorrectLayoutItem(int position) {
96+
if(doesArrayOfLayoutsExist()) {
97+
return mLayoutArrayReferences[position % mLayoutArrayReferences.length];
98+
}
99+
return mLayoutReference;
100+
}
101+
102+
private boolean doesArrayOfLayoutsExist() {
103+
return mLayoutArrayReferences != null && mLayoutArrayReferences.length != 0;
104+
}
72105
}

0 commit comments

Comments
 (0)