android listview with progress in each item scroll unexpectly
===

i have a listview,each row has a progressbar,before scroll this listview,the progressbar progress/max ratio display correct,but after i scroll this listview,the progressbar display incorrect.how to fix this?3ks very much.
if do not use listview cache,just inflate new convertView every time in getView,the progress/max ratio of progressbar directly not correct. 

    @Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewRender viewRender = null;
		if (convertView == null) {
			convertView = LayoutInflater.from(context).inflate(R.layout.my_music_row, null);
			viewRender = new ViewRender(convertView);
			convertView.setTag(viewRender);
		} else {
			viewRender = (ViewRender) convertView.getTag();
		}
		viewRender.render(getItem(position));
		return convertView;
	}
	
	private class ViewRender {
		ImageView imageView;
		TextView stateText;
		TextView nameText;
		TextView infoText;
		ProgressBar progressBar;
		TextView msgNum;
		ImageView arrow;
		TextView playing;
		
		public ViewRender(View convertView) {
			this.imageView = (ImageView) convertView.findViewById(R.id.myMusicRowPlayListCover);
			this.stateText = (TextView) convertView.findViewById(R.id.myMusicRowPlayListState);
			this.nameText = (TextView) convertView.findViewById(R.id.myMusicRowPlayListName);
			this.infoText = (TextView) convertView.findViewById(R.id.myMusicRowPlayListInfo);
			this.progressBar = (ProgressBar) convertView.findViewById(R.id.myMusicRowProgressBar);
			this.msgNum = (TextView) convertView.findViewById(R.id.myMusicRowMsgNum);
			this.arrow = (ImageView) convertView.findViewById(R.id.myMusicRowArrow);
			this.playing = (TextView) convertView.findViewById(R.id.myMusicRowPlaying);
		}
		
		public void render(MyMusicEntry myMusicEntry){
			imageView.setImageResource(R.drawable.default_cover);
			ImageLoaderManager.loadImage(imageView, myMusicEntry.getImageUrl());
			
			nameText.setText(myMusicEntry.getName());
			
			String tail = "首音乐";
			if (myMusicEntry.getSpecialType() == PlayList.PLAYLIST_TYPE.mailbox) {
				tail = "条信息";
			}
			String content = myMusicEntry.getTrackNum() + tail;
			if (!Session.getInstance().getProfile().getNickname().equals(myMusicEntry.getCreatorName())) {
				content += "  by " + myMusicEntry.getCreatorName();
			}
			infoText.setText(content);
			int downloadState = myMusicEntry.getDownloadState();
			switch(downloadState){
			case DownloadManager.NOT_START : 
				stateText.setVisibility(View.GONE);
				progressBar.setVisibility(View.GONE);
				break;
			case DownloadManager.DOWNLOADING : 
				stateText.setText("下载中"); 
				stateText.setVisibility(View.VISIBLE);
				progressBar.setVisibility(View.VISIBLE);
				progressBar.setProgress(myMusicEntry.getProgress());
				progressBar.setMax(myMusicEntry.getTrackNum());
				System.out.println(myMusicEntry + "," + progressBar.getMax() + "," + progressBar.getProgress());
				break;
			case DownloadManager.COMPLETED : 
				stateText.setText("下载完"); 
				stateText.setVisibility(View.VISIBLE);
				progressBar.setVisibility(View.GONE);
				break;
			}
			
			if(actionType.equals(MyMusicActivity.ACTION_ADD_TO_PLAYLIST)){
				progressBar.setVisibility(View.GONE);
				playing.setVisibility(View.GONE);
				arrow.setVisibility(View.GONE);
				msgNum.setVisibility(View.GONE);
				return;
			}
			
			if (myMusicEntry.getSpecialType() == PlayList.PLAYLIST_TYPE.identify || myMusicEntry.getSpecialType() == PlayList.PLAYLIST_TYPE.mailbox) {
				progressBar.setVisibility(View.GONE);
				stateText.setVisibility(View.GONE);
				playing.setVisibility(View.GONE);
				if (myMusicEntry.getSpecialType() == PlayList.PLAYLIST_TYPE.mailbox && myMusicEntry.getUnReadMsgNum() > 0) {
					msgNum.setText("" + myMusicEntry.getUnReadMsgNum());
					msgNum.setVisibility(View.VISIBLE);
				} else {
					msgNum.setVisibility(View.GONE);
				}
			} else {
				msgNum.setVisibility(View.GONE);
				if (myMusicEntry.isPlaying()) {
					arrow.setVisibility(View.GONE);
					playing.setVisibility(View.VISIBLE);
				} else {
					arrow.setVisibility(View.VISIBLE);
					playing.setVisibility(View.GONE);
				}
			}
		}