Skip to content

Commit 2b025af

Browse files
authored
Merge pull request #125 from esmasui/master
Fixed to set mPosition to ViewHolder
2 parents 71b7108 + 45b64b8 commit 2b025af

File tree

2 files changed

+14
-21
lines changed

2 files changed

+14
-21
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package android.support.v7.widget;
2+
3+
public abstract class ViewHolderDelegate {
4+
5+
private ViewHolderDelegate() {
6+
throw new UnsupportedOperationException("no instances");
7+
}
8+
9+
public static void setPosition(RecyclerView.ViewHolder viewHolder, int position) {
10+
viewHolder.mPosition = position;
11+
}
12+
}

lib/src/main/java/com/lsjwzh/widget/recyclerviewpager/LoopRecyclerViewPagerAdapter.java

+2-21
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
11
package com.lsjwzh.widget.recyclerviewpager;
22

33
import android.support.v7.widget.RecyclerView;
4-
import android.util.Log;
4+
import android.support.v7.widget.ViewHolderDelegate;
55

6-
import java.lang.reflect.Field;
76

87
public class LoopRecyclerViewPagerAdapter<VH extends RecyclerView.ViewHolder>
98
extends RecyclerViewPagerAdapter<VH> {
109

11-
private static final String TAG = LoopRecyclerViewPager.class.getSimpleName();
12-
13-
private Field mPositionField;
14-
1510
public LoopRecyclerViewPagerAdapter(RecyclerViewPager viewPager, RecyclerView.Adapter<VH> adapter) {
1611
super(viewPager, adapter);
1712
}
@@ -48,21 +43,7 @@ public void onBindViewHolder(VH holder, int position) {
4843
super.onBindViewHolder(holder, getActualPosition(position));
4944
// because of getCurrentPosition may return ViewHolder‘s position,
5045
// so we must reset mPosition if exists.
51-
if (mPositionField == null) {
52-
try {
53-
mPositionField = holder.getClass().getDeclaredField("mPosition");
54-
mPositionField.setAccessible(true);
55-
} catch (NoSuchFieldException e) {
56-
Log.i(TAG, "The holder doesn't have a mPosition field.");
57-
}
58-
}
59-
if (mPositionField != null) {
60-
try {
61-
mPositionField.set(holder, position);
62-
} catch (Exception e) {
63-
Log.w(TAG, "Error while updating holder's mPosition field", e);
64-
}
65-
}
46+
ViewHolderDelegate.setPosition(holder, position);
6647
}
6748

6849
public int getActualPosition(int position) {

0 commit comments

Comments
 (0)