title: Use AsyncTask to add items to list view individually
body: <p>I am trying to add ListView items one by one. So if I have say -- 60 items -- the application would add the views to the list view one at a time -- thus showing the user that the application is loading more things. </p>
  
  <p>This is my code: </p>
  
  <pre><code>try {
          JSONArray j = getTaggsJSON();
          Log.v(TAG, String.valueOf(j.length()));
          a = new createSpecialAdapter(this, R.layout.individual_tagg_view,
                  R.layout.list_item, view, j);
          ListView v = this.getListView();
          v.setStackFromBottom(true);
          setListAdapter(a);
          new addViewsToList().execute(j);
  
      } catch (UnknownHostException e) {
          e.printStackTrace();
      } catch (JSONException e) {
          e.printStackTrace();
      } catch (IOException e) {
          e.printStackTrace();
      } catch (ServiceException e) {
          e.printStackTrace();
      }
  
  }
  
  private class addViewsToList extends AsyncTask&lt;JSONArray, View, List&lt;View&gt;&gt; {
  
      protected List&lt;View&gt; doInBackground(JSONArray... jsonArrays) {
          List&lt;View&gt; v = new ArrayList&lt;View&gt;();
          Log.v(TAG, String.valueOf(jsonArrays[0].length()));
          for (int x = 0; x &lt; jsonArrays[0].length(); x++) {
              try {
                  Log.v(TAG, jsonArrays[0].getJSONObject(x).toString());
                  v.add(ViewAdapter.createTaggView(jsonArrays[0]
                          .getJSONObject(x), c));
              } catch (JSONException e) {
                  e.printStackTrace();
              }
              publishProgress(v.get(x));
          }
          return v;
      }
  
      protected void onProgressUpdate(View... v) {
          Log.v(TAG, "I'm updating my progress!");
          a.notifyDataSetChanged();
      }
  
      protected void onPostExecute(List&lt;View&gt; views) {
          Log.v(TAG, "i'm done!");
          Log.v(TAG, String.valueOf(views.size()));
      }
  }
  </code></pre>
  
  <p>So, it looks like my code is printing out the views correctly, and putting them in the list correctly, however my activity displays nothing. What am I doing wrong? I thought setting the adapter before -- when there are no views in the list -- and then updating the adapter that the list was changed was the right way to go.... Obviously not.. Can anyone help me?</p>
  
  <p>If you need clarification on my questions please let me know. </p>
  
  <p>EDIT: Here is the adapter code to supplement my question. </p>
  
  <pre><code>private class SpecialAdapter extends ArrayAdapter&lt;JSONArray&gt; {
  
      JSONArray json;
  
      public SpecialAdapter(Context context, int textViewResourceId,
              int listItem, JSONArray j) {
          super(context, textViewResourceId);
          this.json = j;
      }
  
      public View getView(int position, View convertView, ViewGroup parent) {
          ViewHolder holder;
          Log.v(TAG,"I'm inside the getView method.");
          try {
              JSONObject info = json.getJSONObject(position);
              Log.v(TAG,info.toString());
  
  
  
          if (convertView == null) {
              LayoutInflater i = (LayoutInflater) RecentTaggs.this
                      .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
              convertView = i.inflate(R.layout.individual_tagg_view, parent,
                      false);
              holder = new ViewHolder();
              holder.username = (TextView) convertView
                      .findViewById(R.id.userName);
              holder.review = (TextView)convertView.findViewById(R.id.review_text);
              convertView.setTag(holder);
          } else {
              holder = (ViewHolder) convertView.getTag();
          }
  
          holder.review.setText(info.getString("review"));
  
          return convertView;
  
          } catch (JSONException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
          return null;
      }
  
  }
  </code></pre>
  
  <p>My output doesn't output any of my Log.v statements, and doesn't show that its even inside the GetView method. </p>