You code seem pretty good, but I guess you should use baseAdapter instead of SimpleAdapter. If you are going to visible or hide the view on each of your row, it is recommend you to use baseAdapter.
Here's sample of baseAdapter. First, create a new class called MyBaseAdapter.
public class MyBaseAdapter extends BaseAdapter{
private Activity mContext;
private ArrayList<Map<String, Object>> mList;
MyBaseAdapter(Activity context, ArrayList<Map<String, Object>> list){
this.mContext = context;
mList = list;
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Map<String, Object> getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
private static class ViewHolder {
public final TextView audioTitleTextView, autioArtistTextView;
public final ImageView isDownloadedImageView;
public final FrameLayout fl;
public ViewHolder(TextView audioArtist, TextView audioTitle,ImageView isDownloaded, FrameLayout fl){
this.autioArtistTextView = audioArtist;
this.audioTitleTextView = audioTitle;
this.isDownloadedImageView = isDownloaded;
this.fl = fl;
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
TextView audioTitleTextView,autioArtistTextView;
FrameLayout fl;
ImageView isDownloadedImageView;
/*
* If convertView is not null, tried reuse it
* else create LayoutInflater to pack up the row view
*/
if(convertView == null){
convertView = LayoutInflater.from(mContext).inflate(R.layout.tracklistItem , parent,false);
audioTitleTextView = (TextView)convertView.findViewById(R.id.audioTitleTextView);
autioArtistTextView = (TextView)convertView.findViewById(R.id.audioArtistTextView);
isDownloadedImageView = (ImageView)convertView.findViewById(R.id.isDownloadedImageView);
fl = (FrameLayout)convertView.findViewById(R.id.parentFrameLayout);
convertView.setTag(new ViewHolder(autioArtistTextView,audioTitleTextView,isDownloadedImageView));
} else{
ViewHolder holder = (ViewHolder)convertView.getTag();
audioTitleTextView = holder.audioTitleTextView;
autioArtistTextView = holder.autioArtistTextView;
isDownloadedImageView = holder.isDownloadedImageView;
fl = holder.fl;
}
@SuppressWarnings("unchecked")
Map<String, Object> rowItem = getItem(position);
audioTitleTextView.setText(rowItem.get(AUDIO_TITLE));
autioArtistTextView.setText(rowItem.get(AUDIO_ARTIST));
// Change setImageResource to your own image resources
isDownloadedImageView.setImageResource(rowItem.get(AUDIO_DOWNLOADED));
fl.setOnClickListener( new View.OnClickListener(){
@Override
public void onClick(View view){
// hide your progress bar here
}
});
return convertView;
}
Then, change your SimpleAdapter to following
MyBaseAdapter sAdapter = new MyBaseAdapter(this, data);
audioListView = (ListView) findViewById(R.id.audioListView);
audioListView.setAdapter(sAdapter);
Edit: Add FrameLayout to viewHolder and set FrameLayout OnClickListener