3
3
import android .graphics .Color ;
4
4
import android .os .Bundle ;
5
5
import android .os .Handler ;
6
+ import android .os .Looper ;
6
7
import android .support .v4 .widget .SwipeRefreshLayout ;
7
8
import android .support .v7 .widget .LinearLayoutManager ;
8
9
import android .support .v7 .widget .RecyclerView ;
14
15
import com .chad .baserecyclerviewadapterhelper .adapter .PullToRefreshAdapter ;
15
16
import com .chad .baserecyclerviewadapterhelper .base .BaseActivity ;
16
17
import com .chad .baserecyclerviewadapterhelper .data .DataServer ;
18
+ import com .chad .baserecyclerviewadapterhelper .entity .Status ;
17
19
import com .chad .baserecyclerviewadapterhelper .loadmore .CustomLoadMoreView ;
18
20
import com .chad .library .adapter .base .BaseQuickAdapter ;
19
21
import com .chad .library .adapter .base .listener .OnItemClickListener ;
20
22
23
+ import java .util .List ;
24
+
25
+
26
+ interface RequestCallBack {
27
+ void success (List <Status > data );
28
+
29
+ void fail (Exception e );
30
+ }
31
+
32
+ class Request extends Thread {
33
+ private static final int PAGE_SIZE = 6 ;
34
+ private int mPage ;
35
+ private RequestCallBack mCallBack ;
36
+ private Handler mHandler ;
37
+
38
+ private static boolean mFirstPageNoMore ;
39
+ private static boolean mFirstError = true ;
40
+
41
+ public Request (int page , RequestCallBack callBack ) {
42
+ mPage = page ;
43
+ mCallBack = callBack ;
44
+ mHandler = new Handler (Looper .getMainLooper ());
45
+ }
46
+
47
+ @ Override
48
+ public void run () {
49
+ try {Thread .sleep (500 );} catch (InterruptedException e ) {}
50
+
51
+ if (mPage == 2 && mFirstError ) {
52
+ mFirstError = false ;
53
+ mHandler .post (new Runnable () {
54
+ @ Override
55
+ public void run () {
56
+ mCallBack .fail (new RuntimeException ("fail" ));
57
+ }
58
+ });
59
+ } else {
60
+ int size = PAGE_SIZE ;
61
+ if (mPage == 1 ) {
62
+ if (mFirstPageNoMore ) {
63
+ size = 1 ;
64
+ }
65
+ mFirstPageNoMore = !mFirstPageNoMore ;
66
+ if (!mFirstError ) {
67
+ mFirstError = true ;
68
+ }
69
+ } else if (mPage == 4 ) {
70
+ size = 1 ;
71
+ }
72
+
73
+ final int dataSize = size ;
74
+ mHandler .post (new Runnable () {
75
+ @ Override
76
+ public void run () {
77
+ mCallBack .success (DataServer .getSampleData (dataSize ));
78
+ }
79
+ });
80
+ }
81
+ }
82
+ }
21
83
22
84
/**
23
85
* https://github.com/CymChad/BaseRecyclerViewAdapterHelper
24
86
*/
25
- public class PullToRefreshUseActivity extends BaseActivity implements BaseQuickAdapter .RequestLoadMoreListener , SwipeRefreshLayout .OnRefreshListener {
26
- private RecyclerView mRecyclerView ;
27
- private PullToRefreshAdapter pullToRefreshAdapter ;
28
- private SwipeRefreshLayout mSwipeRefreshLayout ;
29
-
30
- private static final int TOTAL_COUNTER = 18 ;
87
+ public class PullToRefreshUseActivity extends BaseActivity {
31
88
32
89
private static final int PAGE_SIZE = 6 ;
33
90
34
- private int delayMillis = 1000 ;
35
-
36
- private int mCurrentCounter = 0 ;
91
+ private RecyclerView mRecyclerView ;
92
+ private SwipeRefreshLayout mSwipeRefreshLayout ;
93
+ private PullToRefreshAdapter mAdapter ;
37
94
38
- private boolean isErr ;
39
- private boolean mLoadMoreEndGone = false ;
95
+ private int mNextRequestPage = 1 ;
40
96
41
97
@ Override
42
98
protected void onCreate (Bundle savedInstanceState ) {
43
99
super .onCreate (savedInstanceState );
44
-
45
100
setContentView (R .layout .activity_main );
46
101
mRecyclerView = (RecyclerView ) findViewById (R .id .rv_list );
47
102
mSwipeRefreshLayout = (SwipeRefreshLayout ) findViewById (R .id .swipeLayout );
48
- mSwipeRefreshLayout .setOnRefreshListener (this );
49
103
mSwipeRefreshLayout .setColorSchemeColors (Color .rgb (47 , 223 , 189 ));
50
104
mRecyclerView .setLayoutManager (new LinearLayoutManager (this ));
51
105
setTitle ("Pull TO Refresh Use" );
52
106
setBackBtn ();
53
107
initAdapter ();
54
108
addHeadView ();
109
+ initRefreshLayout ();
110
+ mSwipeRefreshLayout .setRefreshing (true );
111
+ refresh ();
112
+ }
113
+
114
+ private void initAdapter () {
115
+ mAdapter = new PullToRefreshAdapter ();
116
+ mAdapter .setOnLoadMoreListener (new BaseQuickAdapter .RequestLoadMoreListener () {
117
+ @ Override
118
+ public void onLoadMoreRequested () {
119
+ loadMore ();
120
+ }
121
+ });
122
+ mAdapter .openLoadAnimation (BaseQuickAdapter .SLIDEIN_LEFT );
123
+ // mAdapter.setPreLoadNumber(3);
124
+ mRecyclerView .setAdapter (mAdapter );
125
+
126
+ mRecyclerView .addOnItemTouchListener (new OnItemClickListener () {
127
+ @ Override
128
+ public void onSimpleItemClick (final BaseQuickAdapter adapter , final View view , final int position ) {
129
+ Toast .makeText (PullToRefreshUseActivity .this , Integer .toString (position ), Toast .LENGTH_LONG ).show ();
130
+ }
131
+ });
55
132
}
56
133
57
134
private void addHeadView () {
@@ -61,70 +138,78 @@ private void addHeadView() {
61
138
headView .setOnClickListener (new View .OnClickListener () {
62
139
@ Override
63
140
public void onClick (View v ) {
64
- mLoadMoreEndGone = true ;
65
- pullToRefreshAdapter .setLoadMoreView (new CustomLoadMoreView ());
66
- mRecyclerView .setAdapter (pullToRefreshAdapter );
141
+ mAdapter . setNewData ( null ) ;
142
+ mAdapter .setLoadMoreView (new CustomLoadMoreView ());
143
+ mRecyclerView .setAdapter (mAdapter );
67
144
Toast .makeText (PullToRefreshUseActivity .this , "change complete" , Toast .LENGTH_LONG ).show ();
145
+
146
+ mSwipeRefreshLayout .setRefreshing (true );
147
+ refresh ();
68
148
}
69
149
});
70
- pullToRefreshAdapter .addHeaderView (headView );
150
+ mAdapter .addHeaderView (headView );
71
151
}
72
152
73
- @ Override
74
- public void onLoadMoreRequested () {
75
- mSwipeRefreshLayout .setEnabled (false );
76
- if (pullToRefreshAdapter .getData ().size () < PAGE_SIZE ) {
77
- pullToRefreshAdapter .loadMoreEnd (true );
78
- } else {
79
- if (mCurrentCounter >= TOTAL_COUNTER ) {
80
- // pullToRefreshAdapter.loadMoreEnd();//default visible
81
- pullToRefreshAdapter .loadMoreEnd (mLoadMoreEndGone );//true is gone,false is visible
82
- } else {
83
- if (isErr ) {
84
- pullToRefreshAdapter .addData (DataServer .getSampleData (PAGE_SIZE ));
85
- mCurrentCounter = pullToRefreshAdapter .getData ().size ();
86
- pullToRefreshAdapter .loadMoreComplete ();
87
- } else {
88
- isErr = true ;
89
- Toast .makeText (PullToRefreshUseActivity .this , R .string .network_err , Toast .LENGTH_LONG ).show ();
90
- pullToRefreshAdapter .loadMoreFail ();
91
-
92
- }
153
+ private void initRefreshLayout () {
154
+ mSwipeRefreshLayout .setOnRefreshListener (new SwipeRefreshLayout .OnRefreshListener () {
155
+ @ Override
156
+ public void onRefresh () {
157
+ refresh ();
93
158
}
94
- mSwipeRefreshLayout .setEnabled (true );
95
- }
159
+ });
96
160
}
97
161
98
- @ Override
99
- public void onRefresh () {
100
- pullToRefreshAdapter .setEnableLoadMore (false );
101
- new Handler ().postDelayed (new Runnable () {
162
+ private void refresh () {
163
+ mNextRequestPage = 1 ;
164
+ mAdapter .setEnableLoadMore (false );//这里的作用是防止下拉刷新的时候还可以上拉加载
165
+ new Request (mNextRequestPage , new RequestCallBack () {
166
+ @ Override
167
+ public void success (List <Status > data ) {
168
+ setData (true , data );
169
+ mAdapter .setEnableLoadMore (true );
170
+ mSwipeRefreshLayout .setRefreshing (false );
171
+ }
172
+
102
173
@ Override
103
- public void run () {
104
- pullToRefreshAdapter .setNewData (DataServer .getSampleData (PAGE_SIZE ));
105
- isErr = false ;
106
- mCurrentCounter = PAGE_SIZE ;
174
+ public void fail (Exception e ) {
175
+ Toast .makeText (PullToRefreshUseActivity .this , R .string .network_err , Toast .LENGTH_LONG ).show ();
176
+ mAdapter .setEnableLoadMore (true );
107
177
mSwipeRefreshLayout .setRefreshing (false );
108
- pullToRefreshAdapter .setEnableLoadMore (true );
109
178
}
110
- }, delayMillis );
179
+ }). start ( );
111
180
}
112
181
113
- private void initAdapter () {
114
- pullToRefreshAdapter = new PullToRefreshAdapter ();
115
- pullToRefreshAdapter .setOnLoadMoreListener (this , mRecyclerView );
116
- pullToRefreshAdapter .openLoadAnimation (BaseQuickAdapter .SLIDEIN_LEFT );
117
- // pullToRefreshAdapter.setPreLoadNumber(3);
118
- mRecyclerView .setAdapter (pullToRefreshAdapter );
119
- mCurrentCounter = pullToRefreshAdapter .getData ().size ();
182
+ private void loadMore () {
183
+ new Request (mNextRequestPage , new RequestCallBack () {
184
+ @ Override
185
+ public void success (List <Status > data ) {
186
+ setData (false , data );
187
+ }
120
188
121
- mRecyclerView .addOnItemTouchListener (new OnItemClickListener () {
122
189
@ Override
123
- public void onSimpleItemClick (final BaseQuickAdapter adapter , final View view , final int position ) {
124
- Toast .makeText (PullToRefreshUseActivity .this , Integer .toString (position ), Toast .LENGTH_LONG ).show ();
190
+ public void fail (Exception e ) {
191
+ mAdapter .loadMoreFail ();
192
+ Toast .makeText (PullToRefreshUseActivity .this , R .string .network_err , Toast .LENGTH_LONG ).show ();
125
193
}
126
- });
194
+ }). start () ;
127
195
}
128
196
129
-
130
- }
197
+ private void setData (boolean isRefresh , List data ) {
198
+ mNextRequestPage ++;
199
+ final int size = data == null ? 0 : data .size ();
200
+ if (isRefresh ) {
201
+ mAdapter .setNewData (data );
202
+ } else {
203
+ if (size > 0 ) {
204
+ mAdapter .addData (data );
205
+ }
206
+ }
207
+ if (size < PAGE_SIZE ) {
208
+ //第一页如果不够一页就不显示没有更多数据布局
209
+ mAdapter .loadMoreEnd (isRefresh );
210
+ Toast .makeText (this , "no more data" , Toast .LENGTH_SHORT ).show ();
211
+ } else {
212
+ mAdapter .loadMoreComplete ();
213
+ }
214
+ }
215
+ }
0 commit comments