Skip to content

Instantly share code, notes, and snippets.

@thanhtoan1196
Created October 26, 2016 13:20
Show Gist options
  • Save thanhtoan1196/5ebe96a6190d5c070bb21ac9cd13352f to your computer and use it in GitHub Desktop.
Save thanhtoan1196/5ebe96a6190d5c070bb21ac9cd13352f to your computer and use it in GitHub Desktop.
public class ListActivity extends AppCompatActivity {
private static final int LIMIT = 30;
private boolean mIsRequest = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
RxAbsListView.scrollEvents(listView)
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(Schedulers.io())
.filter(getEndScrollFilter(3))
.filter(new Func1<AbsListViewScrollEvent, Boolean>() {
@Override
public Boolean call(AbsListViewScrollEvent scrollEvent) {
return !mIsRequest;
}
})
.flatMap(new Func1<AbsListViewScrollEvent, Observable<List<String>>>() {
@Override
public Observable<List<String>> call(AbsListViewScrollEvent scrollEvent) {
return getDataObservable(scrollEvent.totalItemCount(), LIMIT);
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<String>>() {
@Override
public void call(List<String> strings) {
mIsRequest = false;
mAdapter.addAll(strings);
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
mIsRequest = false;
Toast.makeText(getApplicationContext(), "失敗しました", Toast.LENGTH_SHORT).show();
}
});
}
private Func1<AbsListViewScrollEvent, Boolean> getEndScrollFilter(final int space) {
return new Func1<AbsListViewScrollEvent, Boolean>() {
@Override
public Boolean call(AbsListViewScrollEvent scrollEvent) {
return scrollEvent.firstVisibleItem() + scrollEvent.visibleItemCount() + space >= scrollEvent.totalItemCount();
}
};
}
private Observable<List<String>> getDataObservable(final int offset, final int limit) {
mIsRequest = true;
final List<String> data = new ArrayList<>();
for (int i = 0; i < limit; i++) {
data.add(String.valueOf(i + offset));
}
return Observable.just(data);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment