Created
October 26, 2016 13:20
-
-
Save thanhtoan1196/5ebe96a6190d5c070bb21ac9cd13352f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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