我最近發佈了這個問題,並試圖讓它解決,但我實施了一些不起作用的更改。 (進度條永遠是旋轉的圓圈)ProgressBar - 不更新AsyncTask
下面的代碼將被註釋以顯示問題。沒有錯誤拋出,它似乎不工作。 Progressbar實現並傳遞給使用publishProgress的AsyncTask,並將其傳遞給嘗試更新進度的OnProgressUpdated()(進度條)。
謝謝大家。
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
if (!(data.get(position) instanceof TemporarySongInfomation)) {
SongViewHolder holder;
view = inflater.inflate(R.layout.music_list_format, null);
holder = new SongViewHolder();
holder.timesplayed = (TextView) view.findViewById(R.id.textView7);
holder.artist = (TextView) view.findViewById(R.id.textView6);
holder.title = (TextView) view.findViewById(R.id.textView5);
holder.imagebutton = (ImageButton) view.findViewById(R.id.playbutton);
holder.source = (TextView) view.findViewById(R.id.textView8);
tempValue = (SongInfomation) data.get(position);
String songName = tempValue.getName();
holder.imagebutton.setBackgroundResource(R.drawable.playbutton1);
holder.source.setText(tempValue.getVideoid());
holder.title.setText(songName.length() > 45 ? songName.substring(0, 38) + "..." : songName);
holder.timesplayed.setText("" + tempValue.getTimesplayed());
holder.artist.setText(tempValue.getArtist());
swipeDetector = new SwipeDetector();
view.setOnClickListener(new SongListOnItemClickListener(position));
view.setOnTouchListener(swipeDetector);
holder.imagebutton.setOnClickListener(new OnPlayButtonClickListener(position));
} else {
TemporarySongViewHolder holder;
view = inflater.inflate(R.layout.music_list_process_format, null);
holder = new TemporarySongViewHolder();
holder.artist = (TextView) view.findViewById(R.id.artisttemp);
holder.bar = (ProgressBar) view.findViewById(R.id.ppbar);
holder.title = (TextView) view.findViewById(R.id.titletemp);
holder.source = (TextView) view.findViewById(R.id.sourcetemp);
tempValue1 = (TemporarySongInfomation) data.get(position);
String songName = tempValue1.getName();
holder.source.setText(tempValue1.getVideoid());
holder.title.setText(songName.length() > 45 ? songName.substring(0, 38) + "..." : songName);
holder.artist.setText(tempValue1.getArtist());
holder.bar.setMax(100);
new UpdateProgressBar(holder.bar, tempValue1).execute();
// here is where the asynctask starts passing it the reference to progress bar!
}
return view;
}
private class UpdateProgressBar extends AsyncTask<Void, Integer, Void> {
private TemporarySongInfomation songinfo;
private ProgressBar progress;
UpdateProgressBar(ProgressBar bar, TemporarySongInfomation tp) {
progress = bar;
songinfo = tp;
}
@Override
protected Void doInBackground(Void... params) {
while (!songinfo.isCompleted()) {
//this will be set to false when its done no problems here
publishProgress((int) songinfo.getProgress());
// sending the message to onProgressUpdate
try {
Thread.sleep(500);
} catch (Exception e) {
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
System.out.println("progress: "+values[0]);
// prints the values just fine!
progress.setProgress(values[0]);
// setting the progressbar here!
}
}
另外,如果我添加的System.out.println(progress.getProgress())設置通過progress.setProgress()的進度後,我總是得到0
究竟是不是工作? ProgressBar沒有顯示?(如果是這樣,你忘了調用'progress.show()') – hrskrs
它顯示爲一個圓圈 –
你需要在任務完成時調用ProgressBar實例上的dismiss()。 – WannaBeGeek