changing textview of row in listview to a view of progressbar and button
===

I've been working on this app that contains a ListView with a TextView in each row.  What I would like to implement is when a row gets clicked, that row changes to a view of a horizontal progressbar, 2 textviews (one showing a float of the progress downloading, and another of the file size) and a button (showing the user something is downloading and giving an option for canceling).  But I have no idea how to add this into my code so far.  I've looked all over for different examples but I think I set up my code in a weird way.  

I have 2 xml files (one with all the info for the main activity and another "tracks" with just a TextView for the list). "menu" is a string array.  "songDownload" returns a URL array (could be 1 or more songs).  Any help would be appreciated.  

Here is my code of how my listview is set up and the AsyncTask that downloads the file:

    final String[] menu = getResources().getStringArray(R.array.tracks);
        
        list.setAdapter(new ArrayAdapter<String>(this, R.layout.tracks, menu));
       
        list.setOnItemClickListener(new OnItemClickListener() 
        {
        	public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        	{    		
        		for(int i = 0; i<menu.length; i++)
        		{
        			try
        			{
        				if(Environment.MEDIA_MOUNTED.equals(state))
        				{
		        			if(((TextView) view).getText().equals(menu[i]))
		        			{
		        				tempLink = songDownload(file, mp, menu[i]);
		        				if(tempLink == null)
		        				{
		        					Toast.makeText(getBaseContext(), menu[i] + " already exists!", Toast.LENGTH_SHORT). show();
		        				}
		        				else
		        				{
		        					DLFiles work = new DLFiles();
		        					work.setTitle(Title(menu[i]));
		        					
		        					work.execute(tempLink);
		        				} // else IF tempLink null
		        			} // IF TEXTVIEW
		        		} // IF MEDIA	
		        		else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) 
		        		{
		        			Toast.makeText(getBaseContext(), "SD read only", Toast.LENGTH_SHORT).show();
		        			i = menu.length + 1;
		        		}
		        		else
		        		{
		        			Toast.makeText(getBaseContext(),  "SDCard may not be present", Toast.LENGTH_SHORT).show();
		        			i = menu.length + 1;
		        		}
		        	
		        	} //end of try       			
        			catch(Exception x)
                	{
                		x.printStackTrace();
                	}
        		} // end of for
        	}//end of publicONCLICK
        }); // end of List.setOnItemListener

    
    private class DLFiles extends AsyncTask<URL, Integer, Long>
	{
    	File path = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
    	String fileString;
    	int count;
    	FileOutputStream fos;
		
    	
    	protected void onPreExecute()
    	{
    		
    	}
    	
    	protected Long doInBackground(URL... urls)
		{
    		try
    		{	
    			for(int i = 0; i<urls.length; i++)
    			{
    				url = urls[i];
    				String sfd = url.getFile();
    				
    				int len = sfd.length();
    				sfdString = new SpannableStringBuilder(sfd, 7, len);
        			HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        			urlConnection.setRequestMethod("GET");
        			urlConnection.setDoOutput(true);
        			urlConnection.connect();
        			
        			InputStream input = urlConnection.getInputStream();

                    byte data[] = new byte[10485760];
                    long total = 0;
                    fileString = path + sfdString.toString();
                    File file = new File(fileString);
                    fos = new FileOutputStream(file);
                    while ((count = input.read(data)) != -1) 
                    {
                        total += count;
                        //publishProgress(""+(int)((total*100)/lenghtOfFile));
                        fos.write(data, 0, count);
                    }
                 
                    fos.flush();
                    fos.close();
                    input.close();
                    
    			}
    			
    		}
    		catch(MalformedURLException e)
    		{
    			e.printStackTrace();
    		}
    		catch(IOException e)
    		{
    			e.printStackTrace();
    		}
    		finally
    		{
    			urlConnection.disconnect();
    		}
    		return null;
		}
    	
    	protected void onProgressUpdate(Integer... progress)
		{
    		
		}
    	
    	protected void onPostExecute(Long result)
		{
    		Toast.makeText(getBaseContext(), "download", Toast.LENGTH_SHORT).show();
    		
		}

	}

