Skip to content

Commit 61efe4e

Browse files
committed
[Feature] Add FastScrollerBuilder.setPopupTextProvider().
1 parent 147e417 commit 61efe4e

3 files changed

Lines changed: 24 additions & 5 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ You can also implement [`PopupTextProvider`](library/src/main/java/me/zhanghai/a
5252
For more customization, please use the methods on [`FastScrollerBuilder`](library/src/main/java/me/zhanghai/android/fastscroll/FastScrollerBuilder.java). Namely:
5353

5454
- `setViewHelper()` allows providing a custom `ViewHelper` to support more views.
55+
- `setPopupTextProvider()` allows providing a custom `PopupTextProvider` if your `RecyclerView.Adapter` cannot implement that interface.
5556
- `setPadding()` allows setting a custom padding for the scrollbar, instead of the padding of the view.
5657
- `setTrackDrawable()` and `setThumbDrawable()` allow setting custom drawables for the scrollbar. The `android:state_pressed` state will be updated for them so you can use a selector.
5758
- `setPopupStyle()` allows customizing the popup view with a lambda that will receive the view.

library/src/main/java/me/zhanghai/android/fastscroll/FastScrollerBuilder.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ public class FastScrollerBuilder {
3939
@Nullable
4040
private FastScroller.ViewHelper mViewHelper;
4141

42+
@Nullable
43+
private PopupTextProvider mPopupTextProvider;
44+
4245
@Nullable
4346
private Rect mPadding;
4447

@@ -65,6 +68,12 @@ public FastScrollerBuilder setViewHelper(@Nullable FastScroller.ViewHelper viewH
6568
return this;
6669
}
6770

71+
@NonNull
72+
public FastScrollerBuilder setPopupTextProvider(@Nullable PopupTextProvider popupTextProvider) {
73+
mPopupTextProvider = popupTextProvider;
74+
return this;
75+
}
76+
6877
@NonNull
6978
public FastScrollerBuilder setPadding(int left, int top, int right, int bottom) {
7079
if (mPadding == null) {
@@ -147,7 +156,7 @@ private FastScroller.ViewHelper getOrCreateViewHelper() {
147156
if (mView instanceof ViewHelperProvider) {
148157
return ((ViewHelperProvider) mView).getViewHelper();
149158
} else if (mView instanceof RecyclerView) {
150-
return new RecyclerViewHelper((RecyclerView) mView);
159+
return new RecyclerViewHelper((RecyclerView) mView, mPopupTextProvider);
151160
} else if (mView instanceof NestedScrollView) {
152161
throw new UnsupportedOperationException("Please use "
153162
+ FastScrollNestedScrollView.class.getSimpleName() + " instead of "

library/src/main/java/me/zhanghai/android/fastscroll/RecyclerViewHelper.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,16 @@ class RecyclerViewHelper implements FastScroller.ViewHelper {
3131

3232
@NonNull
3333
private final RecyclerView mView;
34+
@Nullable
35+
private final PopupTextProvider mPopupTextProvider;
3436

3537
@NonNull
3638
private final Rect mTempRect = new Rect();
3739

38-
public RecyclerViewHelper(@NonNull RecyclerView view) {
40+
public RecyclerViewHelper(@NonNull RecyclerView view,
41+
@Nullable PopupTextProvider popupTextProvider) {
3942
mView = view;
43+
mPopupTextProvider = popupTextProvider;
4044
}
4145

4246
@Override
@@ -115,11 +119,16 @@ public void scrollTo(int offset) {
115119
@Nullable
116120
@Override
117121
public String getPopupText() {
118-
RecyclerView.Adapter<?> adapter = mView.getAdapter();
119-
if (!(adapter instanceof PopupTextProvider)) {
122+
PopupTextProvider popupTextProvider = mPopupTextProvider;
123+
if (popupTextProvider == null) {
124+
RecyclerView.Adapter<?> adapter = mView.getAdapter();
125+
if (adapter instanceof PopupTextProvider) {
126+
popupTextProvider = (PopupTextProvider) adapter;
127+
}
128+
}
129+
if (popupTextProvider == null) {
120130
return null;
121131
}
122-
PopupTextProvider popupTextProvider = (PopupTextProvider) adapter;
123132
int position = getFirstItemAdapterPosition();
124133
if (position == RecyclerView.NO_POSITION) {
125134
return null;

0 commit comments

Comments
 (0)