Skip to content

Instantly share code, notes, and snippets.

@Phonbopit
Created October 7, 2014 18:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Phonbopit/619c3d999ddf19b040e8 to your computer and use it in GitHub Desktop.
Save Phonbopit/619c3d999ddf19b040e8 to your computer and use it in GitHub Desktop.
package com.devahoy.android.scrolltoloadlistview;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MyActivity extends ListActivity {
private List<String> mTotalData = new ArrayList<String>();
private List<String> mCurrentData = new ArrayList<String>();
private int mCurrentPage = 1;
private int mItemPerRow = 20;
private boolean isLoadMore = false;
private Handler mHandler = new Handler();
private ProgressDialog mLoading;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLoading = new ProgressDialog(this);
mLoading.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mLoading.setMessage("Loading....");
for (int i = 1; i <= 300; i++) {
mTotalData.add("Item #" + i);
}
// init first 20 items
getData();
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mCurrentData);
setListAdapter(adapter);
getListView().setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
int lastInScreen = firstVisibleItem + visibleItemCount;
Log.d("TEST", "first : " + firstVisibleItem);
Log.d("TEST", "visible : " + visibleItemCount);
Log.d("TEST", "total : " + totalItemCount);
if ((lastInScreen == totalItemCount) && !isLoadMore && (firstVisibleItem != 0)) {
isLoadMore = true;
mLoading.show();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
getData();
adapter.notifyDataSetChanged();
isLoadMore = false;
mLoading.dismiss();
}
}, 1500);
}
}
});
}
private void getData() {
if (mItemPerRow * mCurrentPage >= mTotalData.size()) {
Toast.makeText(this, "No Data", Toast.LENGTH_SHORT).show();
return;
}
for (int i = 0; i < mItemPerRow; i++) {
mCurrentData.add(mTotalData.get(i + (( mCurrentPage - 1) * mItemPerRow)) );
}
mCurrentPage += 1;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment