Skip to content

Commit 6b121a8

Browse files
committed
code review 1
1 parent c172ac1 commit 6b121a8

File tree

7 files changed

+107
-14
lines changed

7 files changed

+107
-14
lines changed

app/src/main/java/com/omega_r/omegarecyclerview/expandable_example/support_sticky/DefaultStickyAdapter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import com.omega_r.libs.omegarecyclerview.expandable_recycler_view.OmegaExpandableRecyclerView;
1010
import com.omega_r.libs.omegarecyclerview.expandable_recycler_view.data.ExpandableViewData;
1111
import com.omega_r.libs.omegarecyclerview.sticky_decoration.StickyAdapter;
12-
import com.omega_r.libs.omegarecyclerview.sticky_decoration.StickyHeaderDecoration;
12+
import com.omega_r.libs.omegarecyclerview.sticky_decoration.HeaderStickyDecoration;
1313
import com.omega_r.omegarecyclerview.R;
1414
import com.omega_r.omegarecyclerview.expandable_example.core.QuoteGlobalInfo;
1515

@@ -28,9 +28,9 @@ protected ExChildViewHolder provideChildViewHolder(@NonNull ViewGroup viewGroup)
2828
@Override
2929
public long getStickyId(int position) {
3030
ExpandableViewData<QuoteGlobalInfo, String> item = getItem(position);
31-
if (item == null) return StickyHeaderDecoration.NO_HEADER_ID;
31+
if (item == null) return HeaderStickyDecoration.NO_STICKY_ID;
3232
Integer providedId = item.getStickyId();
33-
return providedId == null ? StickyHeaderDecoration.NO_HEADER_ID : providedId;
33+
return providedId == null ? HeaderStickyDecoration.NO_STICKY_ID : providedId;
3434
}
3535

3636
@Override

omegarecyclerviewlibs/src/main/java/com/omega_r/libs/omegarecyclerview/OmegaRecyclerView.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import com.omega_r.libs.omegarecyclerview.pagination.WrapperAdapter;
2323
import com.omega_r.libs.omegarecyclerview.sticky_decoration.BaseStickyDecoration;
2424
import com.omega_r.libs.omegarecyclerview.sticky_decoration.StickyAdapter;
25-
import com.omega_r.libs.omegarecyclerview.sticky_decoration.StickyHeaderDecoration;
25+
import com.omega_r.libs.omegarecyclerview.sticky_decoration.HeaderStickyDecoration;
2626
import com.omega_r.libs.omegarecyclerview.sticky_decoration.StickyMiddleDecoration;
2727
import com.omega_r.libs.omegarecyclerview.swipe_menu.SwipeMenuHelper;
2828

@@ -272,7 +272,7 @@ protected BaseStickyDecoration provideStickyDecoration(@NonNull RecyclerView.Ada
272272
return new StickyMiddleDecoration(stickyAdapter);
273273
case StickyAdapter.Mode.HEADER:
274274
default:
275-
return new StickyHeaderDecoration(stickyAdapter);
275+
return new HeaderStickyDecoration(stickyAdapter);
276276
}
277277
}
278278

omegarecyclerviewlibs/src/main/java/com/omega_r/libs/omegarecyclerview/expandable_recycler_view/ExpandableStickyDecoration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ private int calculateStickyOffset(RecyclerView parent, int headerHeight, long cu
333333
int adapterPosHere = parent.getChildAdapterPosition(parent.getChildAt(nextPosition));
334334
if (adapterPosHere != RecyclerView.NO_POSITION) {
335335
long nextId = mStickyAdapter.getStickyId(adapterPosHere);
336-
if (nextId != currentHeaderId && nextId != NO_HEADER_ID) {
336+
if (nextId != currentHeaderId && nextId != NO_STICKY_ID) {
337337
View next = parent.getChildAt(nextPosition);
338338
RecyclerView.ViewHolder viewHolder = getStickyHeader(parent, adapterPosHere);
339339
if (viewHolder == null) return 0;
@@ -348,7 +348,7 @@ private int calculateGroupOffset(RecyclerView parent, long currentHeaderId, int
348348
int adapterPosHere = parent.getChildAdapterPosition(parent.getChildAt(nextPosition));
349349
if (adapterPosHere != RecyclerView.NO_POSITION) {
350350
long nextId = mExpandableAdapter.getGroupUniqueId(adapterPosHere);
351-
if (nextId != currentHeaderId && nextId != NO_HEADER_ID) {
351+
if (nextId != currentHeaderId && nextId != NO_STICKY_ID) {
352352
View next = parent.getChildAt(nextPosition);
353353
RecyclerView.ViewHolder viewHolder = getGroupHeader(parent, adapterPosHere);
354354
if (viewHolder == null) return OFFSET_NOT_FOUND;

omegarecyclerviewlibs/src/main/java/com/omega_r/libs/omegarecyclerview/header/HeaderFooterWrapperAdapter.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import com.omega_r.libs.omegarecyclerview.OmegaRecyclerView;
1111
import com.omega_r.libs.omegarecyclerview.R;
1212
import com.omega_r.libs.omegarecyclerview.sticky_decoration.StickyAdapter;
13-
import com.omega_r.libs.omegarecyclerview.sticky_decoration.StickyHeaderDecoration;
13+
import com.omega_r.libs.omegarecyclerview.sticky_decoration.HeaderStickyDecoration;
1414

1515
import java.util.List;
1616

@@ -210,16 +210,16 @@ private <V> void copyTo(SparseArray<V> fromArray, SparseArray<V> toArray) {
210210
@Override
211211
public long getStickyId(int position) {
212212
if (position < 0 || mRealAdapter.getItemCount() <= position) {
213-
return StickyHeaderDecoration.NO_HEADER_ID;
213+
return HeaderStickyDecoration.NO_STICKY_ID;
214214
}
215215
StickyAdapter stickyAdapter = getStickyAdapter();
216216
if (stickyAdapter == null) {
217-
return StickyHeaderDecoration.NO_HEADER_ID;
217+
return HeaderStickyDecoration.NO_STICKY_ID;
218218
}
219219

220220
int realAdapterItemCount = mRealAdapter.getItemCount();
221221
if (realAdapterItemCount == 0) {
222-
return StickyHeaderDecoration.NO_HEADER_ID;
222+
return HeaderStickyDecoration.NO_STICKY_ID;
223223
}
224224
if (isHeaderPosition(position)) {
225225
return stickyAdapter.getStickyId(0);

omegarecyclerviewlibs/src/main/java/com/omega_r/libs/omegarecyclerview/sticky_decoration/BaseStickyDecoration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
public abstract class BaseStickyDecoration extends RecyclerView.ItemDecoration {
88

9-
public static final long NO_HEADER_ID = -1L;
9+
public static final long NO_STICKY_ID = -1L;
1010

1111
@Nullable
1212
protected StickyAdapter mStickyAdapter;
@@ -27,7 +27,7 @@ public final void setItemSpace(int itemSpace) {
2727

2828
protected final boolean hasSticker(int position) {
2929
if (mStickyAdapter == null) return false;
30-
return mStickyAdapter.getStickyId(position) != NO_HEADER_ID;
30+
return mStickyAdapter.getStickyId(position) != NO_STICKY_ID;
3131
}
3232

3333
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package com.omega_r.libs.omegarecyclerview.sticky_decoration;
2+
3+
import android.graphics.Rect;
4+
import android.view.View;
5+
import android.view.ViewGroup;
6+
7+
import com.omega_r.libs.omegarecyclerview.utils.ViewUtils;
8+
9+
import androidx.annotation.NonNull;
10+
import androidx.annotation.Nullable;
11+
import androidx.recyclerview.widget.RecyclerView;
12+
13+
import static com.omega_r.libs.omegarecyclerview.utils.ViewUtils.isReverseLayout;
14+
15+
public class HeaderStickyDecoration extends StickyDecoration {
16+
17+
public HeaderStickyDecoration(StickyAdapter adapter) {
18+
super(adapter);
19+
}
20+
21+
@Override
22+
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view,
23+
@NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
24+
super.getItemOffsets(outRect, view, parent, state);
25+
RecyclerView.Adapter adapter = parent.getAdapter();
26+
if (adapter == null) return;
27+
28+
int position = parent.getChildAdapterPosition(view);
29+
int topOffset = 0;
30+
if (position != RecyclerView.NO_POSITION && hasSticker(position)
31+
&& showHeaderAboveItem(parent, position)) {
32+
33+
RecyclerView.ViewHolder stickyHolder = getStickyHolder(parent, position);
34+
if(stickyHolder != null) {
35+
View header = stickyHolder.itemView;
36+
topOffset = header.getHeight();
37+
if (isReverseLayout(parent)) {
38+
if (position != adapter.getItemCount() - 1) topOffset -= mItemSpace;
39+
} else {
40+
if (position != 0) {
41+
if (mItemSpace > topOffset) {
42+
topOffset = 0;
43+
} else {
44+
topOffset -= mItemSpace;
45+
}
46+
}
47+
}
48+
}
49+
}
50+
outRect.set(0, topOffset, 0, 0);
51+
}
52+
53+
private boolean showHeaderAboveItem(@NonNull RecyclerView parent, int position) {
54+
if (mStickyAdapter == null) return false;
55+
RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
56+
if (layoutManager == null) return false;
57+
58+
if (isReverseLayout(parent)) {
59+
int itemCount = layoutManager.getItemCount();
60+
return position == (itemCount - 1) || mStickyAdapter.getStickyId(position + 1)
61+
!= mStickyAdapter.getStickyId(position);
62+
} else {
63+
return position == 0 || mStickyAdapter.getStickyId(position - 1)
64+
!= mStickyAdapter.getStickyId(position);
65+
}
66+
}
67+
68+
@Override
69+
int getOffset(@Nullable RecyclerView.ViewHolder stickyHolder, int stickerHeight, View next) {
70+
if (stickyHolder == null) return 0;
71+
return ((int) next.getY()) - (stickerHeight + stickyHolder.itemView.getHeight());
72+
}
73+
74+
@Override
75+
protected int getStickerTop(boolean isReverseLayout, View child, View sticker, int layoutPos) {
76+
int stickerHeight = sticker.getHeight();
77+
78+
int topMargin = 0;
79+
ViewGroup.LayoutParams layoutParams = child.getLayoutParams();
80+
if (layoutParams instanceof ViewGroup.MarginLayoutParams) {
81+
topMargin = ((ViewGroup.MarginLayoutParams) layoutParams).topMargin;
82+
}
83+
84+
if (layoutPos == 0) stickerHeight = Math.max(stickerHeight, mItemSpace);
85+
return (int) Math.max(0, child.getY() - stickerHeight - topMargin);
86+
}
87+
88+
@Override
89+
protected int getMeasureStickerWidthMode() {
90+
return View.MeasureSpec.EXACTLY;
91+
}
92+
93+
}

omegarecyclerviewlibs/src/main/java/com/omega_r/libs/omegarecyclerview/sticky_decoration/StickyDecoration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ private int calculateOffset(@NonNull RecyclerView parent, int stickerHeight, lon
118118
int adapterPosHere = parent.getChildAdapterPosition(parent.getChildAt(nextPosition));
119119
if (mStickyAdapter != null && adapterPosHere != RecyclerView.NO_POSITION) {
120120
long nextId = mStickyAdapter.getStickyId(adapterPosHere);
121-
if (nextId != currentStickyId && nextId != NO_HEADER_ID) {
121+
if (nextId != currentStickyId && nextId != NO_STICKY_ID) {
122122
View next = parent.getChildAt(nextPosition);
123123
RecyclerView.ViewHolder stickyHolder = getStickyHolder(parent, adapterPosHere);
124124
return getOffset(stickyHolder, stickerHeight, next);

0 commit comments

Comments
 (0)