Endless scrolling listview not working

To Show only 10 item first time in ListView and show more items on scroll follow following steps:

STEP 1: Create a chunkList method which divide ArrayList in parts of size 10:

static <T> List<ArrayList<T>> chunkList(List<T> list, final int L) {
        List<ArrayList<T>> parts = new ArrayList<ArrayList<T>>();
        final int N = list.size();
        for (int i = 0; i < N; i += L) {
            parts.add(new ArrayList<T>(
                list.subList(i, Math.min(N, i + L)))
            );
        }
        return parts;
    }

STEP 2: Create ArrayList and a counter which show current part :

    private boolean isLoadingMore=false;
    Handler mHandler = new Handler();
    List<ArrayList<HashMap<String,String>>> mainArrayList;
    private int count=0;

STEP 3: In onPostExecute break result and show data in ListView:

protected void onPostExecute(ArrayList<HashMap<String,String>> result) {

              super.onPostExecute(result);
              // your code here...
               mainArrayList=chunkList(result,10);
               isLoadingMore=false;
               count=0;
               adapter = new CustomAdapterSent(Interestsent.this, 
                                            mainArrayList.get(count));
               setListAdapter(adapter);
        }

    }

STEP 4: Create addAll method in Adapter to append data in current data source :

public void addAll(ArrayList<HashMap<String,String>> moreData){
   this.listData.addAll(moreData);
   this.notifyDataSetChanged();
}

STEP 5: In onLoadMore load more data in ListView:

mHandler = new Handler();
 listview.setOnScrollListener(new EndlessScrollListener() {
        @Override
        public void onLoadMore(int page, int totalItemsCount) {
                 if(count<mainArrayList.size()-1)
                  {
                     if(adapter !=null){
            count++;                       
            if(!isLoadingMore){
                             isLoadingMore=true;
                             mHandler.postDelayed(loadMoreRunnable,1000); 
                          } 
                      }
                  } 
        }
        });
    }

     Runnable loadMoreRunnable = new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
         if(count<mainArrayList.size())
                   {
                     if(adapter !=null){
                      count++;                       
                      adapter.addAll(mainArrayList.get(count));
                      mHandler.removeCallbacks(loadMoreRunnable);
                      isLoadingMore=false;
                      }
                  } 
        }
    };

Leave a Comment