title: Append new elements from custom adapter to ListView
body: <p>I've got a <code>ListView</code> with a 'show next results' button. The list is filled by a custom adapter extending <code>BaseAdapter</code>. Using it as shown below, only the new results are shown.</p>
  
  <p>How can I append the new results to the list?</p>
  
  <pre><code>ListView listView = (ListView)findViewById(android.R.id.list);  
  
  // Show next results button                  
  View footerView = ((LayoutInflater)ItemList.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_listview, null, false);
  listView.addFooterView(footerView);
  
  footerView.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
          Intent i = getIntent();                             
          i.putExtra("firstIndex", mFirstIndex + NRES_PER_PAGE);
          i.putExtra("itemCount", NRES_PER_PAGE);
          startActivity(i);
      }
  });
  
  mItems = json.getJSONArray("data");                    
  setListAdapter(new ItemAdapter(ItemList.this, mType, mItems));
  </code></pre>
  
  <p>FIX</p>
  
  <p>ListActivity</p>
  
  <pre><code>public class ItemList extends MenuListActivity{
  
      ItemAdapter mItemAdapter;
  
      Integer mFirstIndex = 0;
  
      JSONArray mItems = new JSONArray();
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);    
  
          setContentView(R.layout.item_list);
  
          // Set data adapter
          mItemAdapter = new ItemAdapter(ItemList.this, mType, mItems);
  
          ListView listView = (ListView)findViewById(android.R.id.list);                    
          View footerView = ((LayoutInflater)ItemList.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_listview, null, false);
          listView.addFooterView(footerView);
  
          footerView.setOnClickListener(new View.OnClickListener() {
               public void onClick(View v) {
                   progressDialog = MyProgressDialog.show(ItemList.this, null, null);
                   mFirstIndex = mFirstIndex + ITEM_COUNT; 
                   new GetItemInfoList().execute();
               }
          });  
  
          setListAdapter(mItemAdapter);  
  
          new GetItemInfoList().execute();
      }    
  
      private class GetItemInfoList extends AsyncTask&lt;Void, Void, JSONObject&gt; {
          protected JSONObject doInBackground(Void... params) {
  
              // Set POST data to send to web service
              List&lt;NameValuePair&gt; postData = new ArrayList&lt;NameValuePair&gt;(2);            
              postData.add(new BasicNameValuePair("firstindex", Integer.toString(mFirstIndex)));
              postData.add(new BasicNameValuePair("itemscount", Integer.toString(ITEM_COUNT)));
              JSONObject json = RestJsonClient.getJSONObject(URL_ITEMINFOLIST, postData);            
              return json;
          }
  
          protected void onPostExecute(JSONObject json) {
  
              try {               
                      // Get data from json object and set to list adapter
                      JSONArray jsonArray = json.getJSONArray("data");
                      for(int i=0; i&lt;jsonArray.length(); i++)
                          mItems.put(jsonArray.get(i));
  
                      mItemAdapter.notifyDataSetChanged();
  
                      ListView listView = (ListView)findViewById(android.R.id.list);                    
                      View footerView = ((LayoutInflater)ItemList.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_listview, null, false);
                      listView.addFooterView(footerView);
  
                      footerView.setOnClickListener(new View.OnClickListener() {
                          public void onClick(View v) {
                              progressDialog = MyProgressDialog.show(ItemList.this, null, null);
                              mFirstIndex = mFirstIndex + ITEM_COUNT; 
                              new GetItemInfoList().execute();
                          }
                      });             
  
              } catch (JSONException e) {               
              }
          }
      }
  
  }
  </code></pre>
  
  <p>Adapter</p>
  
  <pre><code>public class ItemAdapter extends BaseAdapter {
  
      private Context mContext;
      private LayoutInflater mInflater;
      private JSONArray mItems;
      private ImageLoader mImageLoader;   
      private int mCategory;
  
      public ItemAdapter(Context context, int category, JSONArray items) {
          mContext = context;        
          mInflater = LayoutInflater.from(context);        
          mItems = items;
          mCategory = category;
          this.mImageLoader = new ImageLoader(context, true);
      }
  
      public int getCount() {
          return mItems.length();
      }
  
      public Object getItem(int position) {
          return position;
      }
  
      public long getItemId(int position) {
          return position;
      }
  
      public View getView(int position, View convertView, ViewGroup parent) {
  
          ViewHolder holder;          
  
          if (convertView == null) {
  
              convertView = mInflater.inflate(R.layout.item_row, null);           
              holder = new ViewHolder();
  
              holder.listitem_pic = (ImageView) convertView.findViewById(R.id.listitem_pic);
              holder.listitem_desc = (TextView) convertView.findViewById(R.id.listitem_desc);
              holder.listitem_title = (TextView) convertView.findViewById(R.id.listitem_title);
  
              convertView.setTag(holder);
  
          } else {           
              holder = (ViewHolder) convertView.getTag();
          }
  
          try {
  
              JSONObject item = mItems.getJSONObject(position);
  
              String listitem_pic = item.getString("picture");
              holder.listitem_pic.setTag(listitem_pic); 
              mImageLoader.DisplayImage(listitem_pic, (Activity)mContext, holder.listitem_pic);
  
              holder.listitem_title.setText(item.getString("title"));
              holder.listitem_desc.setText(item.getString("desc"));
  
          }       
          catch (JSONException e) {          
          }
  
          return convertView;
      }
  
      static class ViewHolder {       
          TextView listitem_title;
          ImageView listitem_pic;       
          TextView listitem_desc;  
      }
  }
  </code></pre>