Skip to content

Commit fd31dc3

Browse files
author
ztiany
committed
fix bugs
1 parent 7bd7eca commit fd31dc3

5 files changed

Lines changed: 66 additions & 24 deletions

File tree

app/src/main/java/com/ztiany/loadmore/DemoFragment.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public class DemoFragment extends BaseLayoutFragment {
3232

3333
private BaseAdapter<String, ViewHolder<String>> mRecyclerAdapter;
3434
private boolean mHasMore = true;
35+
private boolean mAddNewHasMore = true;
3536
private boolean mIsFail;
3637
private int count = 20;
3738

@@ -72,6 +73,7 @@ public void onButtonClick(View v) {
7273
Menu menu = pop.getMenu();
7374
menu.add(Menu.NONE, 1, 0, "next time fail");
7475
menu.add(Menu.NONE, 2, 1, "next time no more");
76+
menu.add(Menu.NONE, 3, 2, "next time add new no more");
7577
menu.add(Menu.NONE, 4, 3, "next time normal");
7678
pop.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
7779
@Override
@@ -87,9 +89,16 @@ public boolean onMenuItemClick(MenuItem item) {
8789
mHasMore = false;
8890
break;
8991
}
92+
case 3: {
93+
mIsFail = false;
94+
mHasMore = true;
95+
mAddNewHasMore = false;
96+
break;
97+
}
9098
case 4: {
9199
mIsFail = false;
92100
mHasMore = true;
101+
mAddNewHasMore = true;
93102
mWrapperAdapter.loadCompleted(true);
94103
break;
95104
}
@@ -171,7 +180,7 @@ public void run() {
171180
}
172181
mRecyclerAdapter.notifyDataSetChanged();
173182
mRefreshLayout.setRefreshing(false);
174-
mWrapperAdapter.loadCompleted(true);
183+
mWrapperAdapter.loadCompleted(mHasMore);
175184
Toast.makeText(getContext(), "刷新完毕", Toast.LENGTH_SHORT).show();
176185
}
177186
}, 1000);
@@ -226,7 +235,9 @@ public void run() {
226235
"新来的Item" + count++,
227236
"新来的Item" + count++,
228237
"新来的Item" + count++));
229-
mWrapperAdapter.loadCompleted(true);
238+
239+
mWrapperAdapter.loadCompleted(mAddNewHasMore);
240+
230241
}
231242
}, 100);
232243
}

library/src/main/java/com/ztiany/loadmore/adapter/KeepFullSpanUtils.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ void setFullSpanForStaggered(View loadMoreView) {
3333
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
3434
((StaggeredGridLayoutManager.LayoutParams) layoutParams).setFullSpan(true);
3535
loadMoreView.setLayoutParams(layoutParams);
36-
3736
} else {
3837
StaggeredGridLayoutManager.LayoutParams slp = (StaggeredGridLayoutManager.LayoutParams) layoutParams;
3938
if (!slp.isFullSpan() || slp.height == ViewGroup.LayoutParams.MATCH_PARENT) {

library/src/main/java/com/ztiany/loadmore/adapter/LoadMoreImpl.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,14 @@ class LoadMoreImpl implements ILoadMore {
2525
private int mCurrentStatus = STATUS_NONE;
2626

2727
private long mPreviousTimeCallingLoadMore;
28-
29-
private static final long MIN_INTERVAL_WHEN_AUTO_MODE = 1000;
28+
private final boolean timeLimited;
3029

3130
@LoadMode private int mLoadMode = LoadMode.AUTO_LOAD;
3231

32+
public LoadMoreImpl(boolean useScrollListener) {
33+
timeLimited = useScrollListener;
34+
}
35+
3336
void tryCallLoadMore(int direction) {
3437
if (mOnLoadMoreListener == null || !mOnLoadMoreListener.canLoadMore()) {
3538
return;
@@ -54,10 +57,11 @@ private boolean checkIfNeedCallLoadMoreWhenAutoMode(int direction) {
5457
if (direction != Direction.UP) {
5558
return false;
5659
}
57-
58-
long now = System.currentTimeMillis();
59-
60-
return now - mPreviousTimeCallingLoadMore >= MIN_INTERVAL_WHEN_AUTO_MODE;
60+
if (timeLimited) {
61+
return System.currentTimeMillis() - mPreviousTimeCallingLoadMore >= 250;
62+
} else {
63+
return true;
64+
}
6165
}
6266

6367
View getLoadMoreView(ViewGroup parent) {

library/src/main/java/com/ztiany/loadmore/adapter/LoadMoreView.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,11 @@ public String getFailMsg() {
8585
return mFailMsg;
8686
}
8787

88+
@Override
89+
public void setVisibility(int visibility) {
90+
super.setVisibility(visibility);
91+
mProgressBar.setVisibility(visibility);
92+
mMsgTv.setVisibility(visibility);
93+
}
94+
8895
}

library/src/main/java/com/ztiany/loadmore/adapter/WrapperAdapter.java

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.ztiany.loadmore.adapter;
22

3+
import android.util.Log;
34
import android.view.View;
45
import android.view.ViewGroup;
56

@@ -15,6 +16,8 @@
1516

1617
public class WrapperAdapter extends RecyclerViewAdapterWrapper implements ILoadMore {
1718

19+
private static final String TAG = "WrapperAdapter";
20+
1821
private static final int LOAD_MORE_FOOTER = Integer.MAX_VALUE;
1922

2023
private LoadMoreImpl mLoadMoreManager;
@@ -28,25 +31,33 @@ public class WrapperAdapter extends RecyclerViewAdapterWrapper implements ILoadM
2831
private KeepFullSpanUtils mKeepFullSpanUtils;
2932

3033
public static WrapperAdapter wrap(RecyclerView.Adapter adapter) {
31-
return new WrapperAdapter(adapter);
34+
return new WrapperAdapter(adapter, false);
35+
}
36+
37+
public static WrapperAdapter wrap(RecyclerView.Adapter adapter, boolean useScrollListener) {
38+
return new WrapperAdapter(adapter, useScrollListener);
3239
}
3340

34-
private WrapperAdapter(RecyclerView.Adapter wrapped) {
41+
private WrapperAdapter(RecyclerView.Adapter wrapped, boolean useScrollListener) {
3542
super(wrapped);
36-
mLoadMoreManager = new LoadMoreImpl();
37-
mScrollListener = new OnRecyclerViewScrollBottomListener() {
38-
@Override
39-
public void onBottom(@Direction int direction) {
40-
mLoadMoreManager.tryCallLoadMore(direction);
41-
}
42-
};
43+
mLoadMoreManager = new LoadMoreImpl(useScrollListener);
4344
mKeepFullSpanUtils = new KeepFullSpanUtils();
45+
46+
if (useScrollListener) {
47+
mScrollListener = new OnRecyclerViewScrollBottomListener() {
48+
@Override
49+
public void onBottom(@Direction int direction) {
50+
Log.d(TAG, "onBottom call LoadMore.");
51+
mLoadMoreManager.tryCallLoadMore(direction);
52+
}
53+
};
54+
}
4455
}
4556

4657
private void initOnAttachedToRecyclerView() {
47-
48-
mRecyclerView.removeOnScrollListener(mScrollListener);
49-
mRecyclerView.addOnScrollListener(mScrollListener);
58+
if (mScrollListener != null) {
59+
mRecyclerView.addOnScrollListener(mScrollListener);
60+
}
5061

5162
RecyclerView.LayoutManager layoutManager = mRecyclerView.getLayoutManager();
5263

@@ -58,12 +69,18 @@ private void initOnAttachedToRecyclerView() {
5869
}
5970

6071
public void setLoadingTriggerThreshold(int loadingTriggerThreshold) {
61-
mScrollListener.setLoadingTriggerThreshold(loadingTriggerThreshold);
72+
if (mScrollListener != null) {
73+
mScrollListener.setLoadingTriggerThreshold(loadingTriggerThreshold);
74+
} else {
75+
Log.d(TAG, "you are not using ScrollListener, this call has no effect.");
76+
}
6277
}
6378

6479
public void setAdapterInterface(AdapterInterface lastVisibleItemPosition) {
6580
mAdapterInterface = lastVisibleItemPosition;
66-
mScrollListener.setLastVisibleItemPositionGetter(lastVisibleItemPosition);
81+
if (mScrollListener != null) {
82+
mScrollListener.setLastVisibleItemPositionGetter(lastVisibleItemPosition);
83+
}
6784
}
6885

6986
@NonNull
@@ -112,7 +129,7 @@ public void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull
112129
@Override
113130
public int getItemCount() {
114131
int count = super.getItemCount();
115-
return count == 0 ? count : count + 1;
132+
return count == 0 ? 0 : count + 1;
116133
}
117134

118135
@Override
@@ -152,6 +169,10 @@ public boolean onFailedToRecycleView(@NonNull ViewHolder holder) {
152169
@Override
153170
public void onViewAttachedToWindow(@NonNull ViewHolder holder) {
154171
if (isLoadMoreOrStateViewHolder(holder)) {
172+
if (mScrollListener == null) {
173+
Log.d(TAG, "onLoadMoreViewAttachedToWindow call LoadMore.");
174+
mLoadMoreManager.tryCallLoadMore(Direction.UP);
175+
}
155176
return;
156177
}
157178
super.onViewAttachedToWindow(holder);

0 commit comments

Comments
 (0)