title: dynamic listview adding "Load more items" at the end of scroll
body: <p>I have a listview which is fetching data from sqlite database by Json.</p>
  
  <p>I want to turn it into dynamic listview that at the end of scroll, a "load more items" appears in the footer of the list while loading more items and adding them to the adapter (for example 10 items each time). I have problem in implementing this feature. Please help me with it. Thanks.</p>
  
  <pre><code>public class AllProductsActivity extends Activity {
  
  ... defining variables...;
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
  
      new LoadAllProducts().execute();
  
  }
  
  class LoadAllProducts extends AsyncTask&lt;String, String, String&gt; {
  
      @Override
      protected void onPreExecute() {
          super.onPreExecute();
          ... progress dialog...
      }
  
      protected String doInBackground(String... args) {
          countryList = new ArrayList&lt;Country&gt;();
          List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;();
          JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);
  
          Log.d("All Products: ", json.toString());
  
          try {
              // Checking for SUCCESS TAG
              int success = json.getInt(TAG_SUCCESS);
  
              if (success == 1) {
                  // products found
                  // Getting Array of Products
                  products = json.getJSONArray(TAG_PRODUCTS);
  
                  // looping through All Products
                  for (int i = 0; i &lt; products.length(); i++) {
                      JSONObject c = products.getJSONObject(i);
  
                      // Storing each json item in variable
                      String id = c.getString(TAG_PID);
                      String name = c.getString(TAG_NAME);
                      String description = c.getString(TAG_DESCRIPTION);
                      String due_date = c.getString(TAG_DUE_DATE);
                      String staff = c.getString(TAG_STAFF);
                      String status = c.getString(TAG_STATUS);
  
                      country = new Country(id,name,description,
                              due_date, staff, status);
                      countryList.add(country);
                  }
              }
          } catch (JSONException e) {
              e.printStackTrace();
          }
  
          return null;
      }
  
      protected void onPostExecute(String file_url) {
          pDialog.dismiss();
          runOnUiThread(new Runnable() {
              public void run() {
  
                  displayListView();
  
              }
          });
      }
  }
  
  private void displayListView() {
      dataAdapter = new MyCustomAdapter(this,
              R.layout.country_info, countryList);
      ListView listView = (ListView) findViewById(R.id.listView1);
      listView.setAdapter(dataAdapter);
  }
  
  private class MyCustomAdapter extends ArrayAdapter&lt;Country&gt; {
  
      ... blah blah blah ...
  
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
  
          ViewHolder holder = null;
          Log.v("ConvertView", String.valueOf(position));
          if (convertView == null) {
          ... blah blah blah ...
          }
  
          return convertView;
      }
  }
  }
  </code></pre>