Taking inspiration from Android Market, i have implemented a Endless List which loads more data from the server when we reach the end of the List.
Now, i need to implement the progressbar & "Loading.." text as shown
Sample code to take inspiration from would be great.
Here is a solution that also makes it easy to show a loading view in the end of the ListView while it's loading.
You can see the classes here:
https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/helper/ListViewWithLoadingIndicatorHelper.java - Helper to make it possible to use the features without extending from SimpleListViewWithLoadingIndicator.
https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/listener/EndlessScrollListener.java - Listener that starts loading data when the user is about to reach the bottom of the ListView.
https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/view/SimpleListViewWithLoadingIndicator.java - The EndlessListView. You can use this class directly or extend from it.
Add an onScrollListener to the ListView. When the user scrolls, check if the ListView is nearing its end. If yes, then fetch more data. As an example :
public abstract class LazyLoader implements AbsListView.OnScrollListener { private static final int DEFAULT_THRESHOLD = 10 ; private boolean loading = true ; private int previousTotal = 0 ; private int threshold = DEFAULT_THRESHOLD ; public LazyLoader() {} public LazyLoader(int threshold) { this.threshold = threshold; } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if(loading) { if(totalItemCount > previousTotal) { // the loading has finished loading = false ; previousTotal = totalItemCount ; } } // check if the List needs more data if(!loading && ((firstVisibleItem + visibleItemCount ) >= (totalItemCount - threshold))) { loading = true ; // List needs more data. Go fetch !! loadMore(view, firstVisibleItem, visibleItemCount, totalItemCount); } } // Called when the user is nearing the end of the ListView // and the ListView is ready to add more items. public abstract void loadMore(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount); }
Activity :
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); ListView listView = (ListView) findViewById(R.id.listView); listView.setOnScrollListener(new LazyLoader() { @Override public void loadMore(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // Fetch your data here !!! } }); } }
You can find the complete implementation at this link
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With