Skip to content

Commit ed112a1

Browse files
Merge pull request #47 from Omega-R/develop
Wrong position when use header
2 parents cce3358 + b83d68e commit ed112a1

File tree

3 files changed

+48
-6
lines changed

3 files changed

+48
-6
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package android.support.v7.widget;
2+
3+
import android.content.Context;
4+
import android.support.annotation.Nullable;
5+
import android.util.AttributeSet;
6+
7+
public class ExpandedRecyclerView extends RecyclerView {
8+
9+
public ExpandedRecyclerView(Context context) {
10+
super(context);
11+
}
12+
13+
public ExpandedRecyclerView(Context context, @Nullable AttributeSet attrs) {
14+
super(context, attrs);
15+
}
16+
17+
public ExpandedRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
18+
super(context, attrs, defStyle);
19+
}
20+
21+
@Override
22+
protected int getAdapterPositionFor(ViewHolder viewHolder) {
23+
return super.getAdapterPositionFor(viewHolder);
24+
}
25+
26+
}

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import android.support.annotation.IdRes;
1010
import android.support.annotation.LayoutRes;
1111
import android.support.annotation.Nullable;
12+
import android.support.v7.widget.ExpandedRecyclerView;
1213
import android.support.v7.widget.LinearLayoutManager;
1314
import android.support.v7.widget.RecyclerView;
1415
import android.util.AttributeSet;
@@ -30,7 +31,7 @@
3031
import java.util.List;
3132
import java.util.WeakHashMap;
3233

33-
public class OmegaRecyclerView extends RecyclerView implements SwipeMenuHelper.Callback {
34+
public class OmegaRecyclerView extends ExpandedRecyclerView implements SwipeMenuHelper.Callback {
3435

3536
private static final int[] DEFAULT_DIVIDER_ATTRS = new int[]{android.R.attr.listDivider};
3637

@@ -369,6 +370,18 @@ public void setPaginationCallback(OnPageRequestListener callback) {
369370
mPageRequester.setPaginationCallback(callback);
370371
}
371372

373+
@Override
374+
protected int getAdapterPositionFor(RecyclerView.ViewHolder viewHolder) {
375+
RecyclerView.Adapter adapter = getAdapter();
376+
int realPosition = super.getAdapterPositionFor(viewHolder);
377+
378+
if (adapter == null) return realPosition;
379+
if (adapter instanceof HeaderFooterWrapperAdapter) {
380+
return ((HeaderFooterWrapperAdapter) adapter).applyRealPositionToChildPosition(realPosition);
381+
}
382+
return realPosition;
383+
}
384+
372385
public void showProgressPagination() {
373386
RecyclerView.Adapter adapter = getAdapter();
374387
if (adapter instanceof HeaderFooterWrapperAdapter) {

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import android.view.ViewGroup;
99

1010
import com.omega_r.libs.omegarecyclerview.OmegaRecyclerView;
11-
import com.omega_r.libs.omegarecyclerview.pagination.WrapperAdapter;
1211
import com.omega_r.libs.omegarecyclerview.sticky_header.StickyHeaderAdapter;
1312
import com.omega_r.libs.omegarecyclerview.sticky_header.StickyHeaderDecoration;
1413

@@ -36,10 +35,10 @@ public HeaderFooterWrapperAdapter(T adapter) {
3635
@Override
3736
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
3837
if (isHeader(viewType)) {
39-
return new ViewHolder(mHeaderArray.get(viewType));
38+
return new SectionViewHolder(mHeaderArray.get(viewType));
4039
}
4140
if (isFooter(viewType)) {
42-
return new ViewHolder(mFooterArray.get(viewType));
41+
return new SectionViewHolder(mFooterArray.get(viewType));
4342
}
4443
return mRealAdapter.onCreateViewHolder(parent, viewType);
4544
}
@@ -164,6 +163,10 @@ public long getHeaderId(int position) {
164163
return stickyHeaderAdapter.getHeaderId(position - mHeaderArray.size());
165164
}
166165

166+
public int applyRealPositionToChildPosition(int realPosition) {
167+
return realPosition - mHeaderArray.size();
168+
}
169+
167170
@Nullable
168171
public StickyHeaderAdapter getStickyHeaderAdapter() {
169172
if (mRealAdapter instanceof StickyHeaderAdapter) {
@@ -212,9 +215,9 @@ protected void tryNotifyItemRangeRemoved(int positionStart, int itemCount) {
212215
super.tryNotifyItemRangeRemoved(positionStart + mHeaderArray.size(), itemCount);
213216
}
214217

215-
class ViewHolder extends RecyclerView.ViewHolder {
218+
public class SectionViewHolder extends RecyclerView.ViewHolder {
216219

217-
public ViewHolder(View itemView) {
220+
public SectionViewHolder(View itemView) {
218221
super(itemView);
219222
}
220223
}

0 commit comments

Comments
 (0)