title: Showing status for the last list item in a ListView using ViewHolder
body: <pre><code>    int globalPosition ;
  
      ..............
  
      buttonAllData.setOnClickListener(new OnClickListener() { 
  
      @Override 
      public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
          new UploadBulkData(globalPosition).execute();
  
          } 
      });
  
     ........
  
     class UploadBulkData extends AsyncTask&lt;String, String, String&gt; {
      private ProgressDialog pDialog;
      int dataPosition;
  
      public UploadBulkData(int position){
       this.dataPosition = position;
      }
  
      @Override
      protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(UploadActivity.this);
        pDialog.setMessage("Uploading...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
      }
  
      @Override
      protected String doInBackground(String... args) {
         .......
         String url = "http://web/uploadBulk.php";
         List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;();
         params.add(new BasicNameValuePair("UserData", st));
  
         String resultServer = getHttpPost(url,params); 
         Log.d("Entire string::", " " + resultServer); 
  
         /*** Default Value ***/
         strStatusID = "0"; 
         strError = ""; 
  
        JSONObject jsonObject;
        try { 
          jsonObject = new JSONObject(resultServer); 
          strStatusID = jsonObject.getString("StatusID"); 
          strError = jsonObject.getString("Message"); 
        } catch (JSONException e) { 
          e.printStackTrace();
        } 
     }
  
     return null;
  
     }
  
     protected void onPostExecute(String file_url) {
  
           pDialog.dismiss();
           fileNameDB=ImageList.get(globalPosition).toString().substring
              (strPath.lastIndexOf('/')+1, strPath.length());
  
           if(strStatusID.equals("1"))
             {
               Toast.makeText(UploadActivity.this, "Data Uploaded Successfully", Toast.LENGTH_SHORT).show();
  
              long saveImge = myDbbv.InsertData(fileNameDB);
              Log.d("fileNameDB:UP", String.valueOf(saveImge));
             }
             else
             {   
               Toast.makeText(UploadActivity.this, "Unable to upload Data", Toast.LENGTH_SHORT).show();                                   
             }
  
             if (file_url != null){
                 Toast.makeText(UploadActivity.this, file_url, Toast.LENGTH_LONG).show();
              }
         }
  }
  </code></pre>
  
  <p>And in getView i am using something like this:</p>
  
  <pre><code>public View getView(final int position, View convertView, ViewGroup parent) {
  
  holder.dataImageView.setImageResource(R.drawable.bullet_button);
  
  try {
      // check data exist or not
      boolean strDataExistU = myDbbv.Exists(fileNameDB);
      if(strDataExistU)
      {
        holder.dataImageView.setImageResource(R.drawable.online);
      }
      else
      {
        boolean strDataExist = myDb.Exists(fileNameDB);
        if(strDataExist)
        {
          holder.dataImageView.setImageResource(R.drawable.local);
        }
        else
        {
        holder.dataImageView.setImageResource(R.drawable.default);
        }
     }                    
  
     } catch (Exception e) {
  
     }
  
    }
  </code></pre>
  
  <p>As you can see in getView(...) method, I am using three different kind of drawables (namely:- online, local, default)</p>
  
  <p>Where online shows data has been uploaded to online server, local shows this has been added to local database and default..(neither uploaded to server nor stored to local database)</p>
  
  <p>Problem:</p>
  
  <p>Whenever I am doing bulk upload, getting online drawable only for the last row item in a list, whereas I have uploaded whole list item data to server</p>
  
  <p>I just want to show online drawable for all the list items, those I have uploaded to server, else my code works just fine...</p>
  
  <p>Almost <strong>complete code</strong>:</p>
  
  <pre><code>public class UploadActivity extends Activity  { 
  
          int globalPosition ;
  
          @Override
          public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);      
  
          setContentView(R.layout.activity_upload);
  
          ImageButton buttonAllData = (ImageButton) findViewById(R.id.btnMenus); 
          buttonAllData.setOnClickListener(new OnClickListener() { 
  
          @Override 
          public void onClick(View arg0) { 
          // TODO Auto-generated method stub 
  
              new UploadBulkData(globalPosition).execute();
  
              } 
          });
  
          /*** Get Images from SDCard ***/
          ImageList = getSD();
  
          // ListView and imageAdapter
          lstView = (ListView) findViewById(R.id.listView1);
          lstView.setAdapter(new ImageAdapter(this));
  
          totalItems = ""+ lstView.getAdapter().getCount();
          }
  
          public static List &lt;String&gt; getSD()
          {
              List &lt;String&gt; it = new ArrayList &lt;String&gt;();
              String string = "/mnt/sdcard/Pictures/Joseph/";
              f = new File (string+ CameraLauncherActivity.folder+ "/");
              files = f.listFiles ();
  
              /***
               * to show last taken image on top using lastModified
               * to sort data
               * to refresh data after (remove or update)
               */
              Arrays.sort(files, new Comparator&lt;Object&gt;()
              {
                  public int compare(Object o1, Object o2) {
  
                      if (((File)o1).lastModified() &gt; ((File)o2).lastModified()) {
                          return -1;
                      } else if (((File)o1).lastModified() &lt; ((File)o2).lastModified()) {
                          return +1;
                      } else {
                          return 0;
                      }
                  }
              });
              // &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; END &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;
  
              for (int i = 0; i &lt; files.length; i++)
              {
              file = files[i];
              Log.d("Count",file.getPath());
              it.add (file.getPath());
              }
  
          return it;  
          }           
  
          static class ViewHolder {
              public ViewHolder(View convertView) {
                  // TODO Auto-generated constructor stub
              }                
              TextView imageNameTextView;
              ImageView sdCardImageView, statusImageView, dataImageView;
              ProgressBar uploadProgressBar;
              ImageButton uploadImageButton, dataImageButton;            
              boolean isUploading = false;           
          }  
  
           public class ImageAdapter extends BaseAdapter
              {
                  public ImageAdapter(Context c)
                  {
  
                  }
  
                  public int getCount() {
                      // TODO Auto-generated method stub
                      return ImageList.size();
                  }
  
                  public Object getItem(int position) {
                      // TODO Auto-generated method stub
                      return position;
                  }
  
                  public long getItemId(int position) {
                      // TODO Auto-generated method stub
                      return position;
                  }
  
          public View getView(final int position, View convertView, ViewGroup parent) {
              // Avoid unneccessary calls to findViewById() on each row, which is expensive!
  
                  holder = null;
  
                   // If this item is to be synced
                  if(flags.get(position)) {                   
  
                      startUpload(position);
  
                  // Mark as synced
                  flags.put(position, false);
                  }
  
                  /*
                   * If convertView is not null, we can reuse it directly, no inflation required!
                   * We only inflate a new View when the convertView is null.
                   */
                  if (convertView == null) {
                  convertView = getLayoutInflater().inflate(R.layout.list_upload, null);
                  holder = new ViewHolder(convertView);
  
                  // Create a ViewHolder and store references to the children views
                  holder.imageNameTextView = (TextView) convertView.findViewById(R.id.ColImgName);
                  holder.sdCardImageView = (ImageView) convertView.findViewById(R.id.ColImgPath);
                  holder.statusImageView = (ImageView) convertView.findViewById(R.id.ColStatus);
                  holder.uploadProgressBar = (ProgressBar) convertView.findViewById(R.id.progressBar);
                  holder.uploadImageButton = (ImageButton) convertView.findViewById(R.id.btnUpload);
                  holder.dataImageButton = (ImageButton) convertView.findViewById(R.id.btnData);                
                  holder.dataImageView = (ImageView) convertView.findViewById(R.id.dataExist);
  
                  // The tag can be any Object, this just happens to be the ViewHolder
                  convertView.setTag(holder);                
                  } else {                    
                  holder = (ViewHolder) convertView.getTag();             
                  }
  
                  strPath = ImageList.get(position).toString();
  
                  // Get File Name
                  fileName = strPath.substring( strPath.lastIndexOf('_')+1, strPath.length() );
                  file = new File(strPath);
                  @SuppressWarnings("unused")
                  long length = file.length();
                  holder.imageNameTextView.setText(fileName);
  
                  fileName=ImageList.get(position).toString().substring
              (strPath.lastIndexOf('_')+1, strPath.length());
          fileNameDB=ImageList.get(position).toString().substring
              (strPath.lastIndexOf('/')+1, strPath.length());
  
                  final BitmapFactory.Options options = new BitmapFactory.Options();
  
                  options.inSampleSize = 8;
  
                  Bitmap bm = BitmapFactory.decodeFile(strPath,options);
                  holder.sdCardImageView.setImageBitmap(bm);       
  
                  if(holder.isUploading) {                    
                      holder.uploadProgressBar.setVisibility(View.VISIBLE);
                  } else {
                      holder.uploadProgressBar.setVisibility(View.GONE);
                  }                                                                                       
                  holder.dataImageView.setImageResource(R.drawable.bullet_button);
  
                  try {
                      // check data exist or not
                      boolean strDataExistU = myDbbv.Exists(fileNameDB);
                      if(strDataExistU)
                      {
                          holder.dataImageView.setImageResource(R.drawable.online);
                      }
                      else
                      {
                          // check data exist or not
                          boolean strDataExist = myDb.Exists(fileNameDB);
                          if(strDataExist)
                          {
                              holder.dataImageView.setImageResource(R.drawable.database);
                          }
                          else
                          {
                              holder.dataImageView.setImageResource(R.drawable.default);
                          }
                      }                   
  
                  } catch (Exception e) {
                      // TODO: handle exception
                  }
  
                  fileName = ImageList.get(position).toString().substring
                          (strPath.lastIndexOf('/')+1, strPath.length());
  
                  try {
                      boolean strExist = myDbb.Exists(fileName);
                      if(strExist)
                      {
                          holder.statusImageView.setImageResource(R.drawable.onl);
                      }
                      else
                      {
                          holder.statusImageView.setImageResource(R.drawable.bullet_button);
                      }
                  } catch (Exception e) {
                      // TODO: handle exception
                  }
  
  
                  // btnData
                  holder.dataImageButton.setOnClickListener(new View.OnClickListener() {
                  @SuppressWarnings("deprecation")
                  public void onClick(View v) {
                      // Print
                      globalPosition = position;
                      fileName=ImageList.get(position).toString().substring
                              (strPath.lastIndexOf('_')+1, strPath.length());
                      fileNameDB=ImageList.get(position).toString().substring
                              (strPath.lastIndexOf('/')+1, strPath.length());
                      showDialog(DIALOG_LOGIN);
                      }
                  });     
  
          return convertView;
  
              }   
          }
  
  
                          class UploadData extends AsyncTask&lt;String, String, String&gt; {
                              private ProgressDialog pDialog;
  
                               /**
                              * Before starting background thread Show Progress Dialog
                              * */
  
                             @Override
                             protected void onPreExecute() {
                                 super.onPreExecute();
                                 pDialog = new ProgressDialog(UploadActivity.this);
                                 pDialog.setMessage("Uploading...");
                                 pDialog.setIndeterminate(false);
                                 pDialog.setCancelable(true);
                                 pDialog.show();                     
                             }
  
                              @Override
                              protected String doInBackground(String... args) {
  
                                  String url = "http://web/uploadData.php";                                       
  
                                  List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;();
  
                                  params.add(new BasicNameValuePair("sImageName", fileNameDB));
                                  Log.d("sImageName::", fileNameDB);
  
  
                                  String resultServer  = getHttpPost(url,params);
                                  Log.d("Entire string::", " " + resultServer);
  
                                  /*** Default Value ***/
                                  strStatusID = "0";
                                  strError = "";
  
                                  JSONObject c;
                                  try {
                                      c = new JSONObject(resultServer);
                                      strStatusID = c.getString("StatusID");
                                      strError = c.getString("Error");
                                  } catch (JSONException e) {
                                      // TODO Auto-generated catch block
                                      e.printStackTrace();
                                  }                                          
  
                                 return null;
  
                              }
                              /**
                              * After completing background task Dismiss the progress dialog
                              * **/
                             protected void onPostExecute(String file_url) {
                                 // dismiss the dialog once product deleted
                                 pDialog.dismiss();
  
                                 try {
  
                                    fileName=ImageList.get(globalPosition).toString().substring
                                              (strPath.lastIndexOf('_')+1, strPath.length());
                                      fileNameDB=ImageList.get(globalPosition).toString().substring
                                              (strPath.lastIndexOf('/')+1, strPath.length());
  
                                      // prepare save data
                                      if(strStatusID.equals("0"))
                                      {
                                          Toast.makeText(getApplicationContext(), "Unable to upload Data",
                                                  Toast.LENGTH_LONG).show();
                                      }
                                      else if (strStatusID.equals("1"))
                                      {
                                          Toast.makeText(getApplicationContext(), "Data Uploaded Successfully!", 
                                                  Toast.LENGTH_SHORT).show();
                                          // Save Data
                                          long saveImge = myDbbv.InsertData(fileNameDB);
                                          Log.d("fileNameDB:UP", String.valueOf(saveImge));
                                      } else {
                                          Toast.makeText(getApplicationContext(), "Unable to upload Data",
                                                  Toast.LENGTH_LONG).show();
                                      }
  
                                } catch (Exception e) {
                                      // TODO: handle exception
                                  }
  
  
                             if (file_url != null){
                                  Toast.makeText(UploadActivity.this, file_url, Toast.LENGTH_LONG).show();
                             }
  
                         }
  
                      }
  
  
                  }); 
  
                  cancelButton.setOnClickListener(new View.OnClickListener(){ 
                      @Override
                          public void onClick(View v) {                           
                          alertDialog.dismiss();
                          }
                  });
  
                  closeButton.setOnClickListener(new View.OnClickListener(){ 
                      @Override
                          public void onClick(View v) {                           
                          alertDialog.dismiss();
                          }
                  });
              }
          }       
  
  
                          class UploadBulkData extends AsyncTask&lt;String, String, String&gt; {
                              private ProgressDialog pDialog;
  
                              int dataPosition;
  
                              //constructor to pass position of row, on which button was clicked to class
                              public UploadBulkData(int position){
                                  this.dataPosition = position;
                              }
  
                               /**
                              * Before starting background thread Show Progress Dialog
                              * */
  
                             @Override
                             protected void onPreExecute() {
                                 super.onPreExecute();
                                 pDialog = new ProgressDialog(UploadActivity.this);
                                 pDialog.setMessage("Uploading...");
                                 pDialog.setIndeterminate(false);
                                 pDialog.setCancelable(true);
                                 pDialog.show();
                             }
  
                              @Override
                              protected String doInBackground(String... args) {
  
                                  String url = "http://web/uploadBulk.php";
  
                                  List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;();
                                  params.add(new BasicNameValuePair("EventData", st));
  
                                  String resultServer = getHttpPost(url,params); 
                                  Log.d("Entire string::", " " + resultServer); 
  
                                  /*** Default Value ***/
                                  strStatusID = "0"; 
                                  strError = ""; 
  
                                  JSONObject jsonObject;
                                  try { 
                                          jsonObject = new JSONObject(resultServer); 
                                          strStatusID = jsonObject.getString("StatusID"); 
                                          strError = jsonObject.getString("Message"); 
                                          } catch (JSONException e) { 
                                          // TODO Auto-generated catch block 
                                          e.printStackTrace();
                                      } 
                                  }
  
                                 return null;
  
                              }
                              /**
                              * After completing background task Dismiss the progress dialog
                              * **/
                             protected void onPostExecute(String file_url) {
                                 // dismiss the dialog once product deleted
                                 pDialog.dismiss();
  
                                  // Prepare Save Data
                                  if(strStatusID.equals("1"))
                                  {
                                      Toast.makeText(UploadActivity.this, "Data Uploaded Successfully", Toast.LENGTH_SHORT).show();
                                      fileNameDB=ImageList.get(dataPosition).toString().substring
                                              (strPath.lastIndexOf('/')+1, strPath.length());
  
                                      // Save Data
                                      long saveImge = myDbbv.InsertData(fileNameDB);
                                      Log.d("fileNameDB:UP", String.valueOf(saveImge));
                                  }
                                  else
                                  {
                                      Toast.makeText(UploadActivity.this, "Unable to upload Data", Toast.LENGTH_SHORT).show();                                    
                                  }
  
                                 if (file_url != null){
                                      Toast.makeText(UploadActivity.this, file_url, Toast.LENGTH_LONG).show();
                                 }
  
                             }
  
              }
  </code></pre>