Вам нужен просто scroll listener.
1. Делаяете какой-нить метод который будет загружать\брать из базы данные с параметром пагинации.
2. По умолчанию он грузит первую страницу, допустим 3 элемента, парсит там что надо, скармливает обычному адаптеру и т.п.
3. Цепляем к нему листенер
public class EndlessScrollListener implements OnScrollListener {
private int visibleThreshold = 5;
private int currentPage = 0;
private int previousTotal = 0;
private boolean loading = true;
public EndlessScrollListener() {
}
public EndlessScrollListener(int visibleThreshold) {
this.visibleThreshold = visibleThreshold;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (loading) {
if (totalItemCount > previousTotal) {
loading = false;
previousTotal = totalItemCount;
currentPage++;
}
}
if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
// I load the next page of gigs using a background task,
// but you can call any function here.
new LoadGigsTask().execute(currentPage + 1);
loading = true;
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
}
GigList.setOnScrollListener(new EndlessScrollListener());
benjii.me/2010/08/endless-scrolling-listview-in-android
4. Он при скролле будет инкрементить currentPage, и, там, где в примере new LoadGigsTask().execute(currentPage + 1), вызываете свой метод, который будет грузить уже не 3, а 6, 9, 12 и загружать это дело в адапатер.
Там уже в зависимости от того из базы эти данные, из провайдера или из интеренета - логика может слегка меняться, но суть всегда одна - листенер на скролл, который помнит текущую страницу.
UPD: не нужно грузить 100, показывать 3, а 97 прятать - если юзеру для начала нужно 3 - то и грузить надо ровно 3.