我有一個GridView
單元格包含一個書名和一個下載按鈕。我希望下載按鈕消失,並在按下該按鈕時顯示進度條。與此同時,我開始下載文件,並希望在下載更新時更新進度欄。最後,當下載完成時,我想隱藏進度條並顯示一個按鈕。如何正確更新GridView中的進度條?
我這個結構是自己創建一個自定義適配器,用下面的方法getView方式:
public View getView(final int position, View convertView, ViewGroup parent) {
final RelativeLayout card;
if (convertView == null) {
card = (RelativeLayout) getLayoutInflater().inflate(R.layout.book_cover, null);
} else {
card = (RelativeLayout) convertView;
}
TextView bookName = (TextView) card.findViewById(R.id.textView_bookName);
final MNBook currentBook = getItem(position);
bookName.setText((String) currentBook.getTitle());
final Button downloadBookButton = (Button) card.findViewById(R.id.button_download_book);
final Button readBookButton = (Button) card.findViewById(R.id.button_read_book);
final ProgressBar progressBar = (ProgressBar) card.findViewById(R.id.progressbar_book_download);
downloadBookButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
downloadFile(currentBook, progressBar,
downloadBookButton, readBookButton);
}
});
if (currentBook.isBooleanDownloaded()) {
downloadBookButton.setVisibility(View.GONE);
readBookButton.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
}
return card;
}
用下面的方法downloadFile
:
private void downloadFile(MNBook book, final ProgressBar progressBar,
final Button downloadButton, final Button readButton) {
final MNBook localBook = book;
String fileName = book.getFileName();
String url = book.getURL();
Intent intent = new Intent(this, DownloadService.class);
intent.putExtra("url", url);
intent.putExtra("file_name", fileName);
intent.putExtra("receiver", new ResultReceiver(new Handler()) {
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
super.onReceiveResult(resultCode, resultData);
if (resultCode == DownloadService.UPDATE_PROGRESS) {
int progress = resultData.getInt("progress");
progressBar.setProgress(progress);
if (progress == 100) {
progressBar.setVisibility(View.GONE);
readButton.setVisibility(View.VISIBLE);
setDownloadedBookStatus(localBook);
}
}
}
});
downloadButton.setVisibility(View.GONE);
progressBar.setVisibility(View.VISIBLE);
startService(intent);
}
我有問題這種方法是進度條跳轉到其他單元格。基本上,如果我在一本書上點擊下載並向下滾動,則進度會出現在不同的書中。
我想知道如何解決此問題。如果有另一種方法來設置我的代碼,對我來說沒關係。
每次我更新進度時,都會調用'notifyDataSetChanged()'的結果,我注意到我不能再觸發新的下載。如果我嘗試按下下載按鈕而另一個正在下載,那麼我沒有得到任何迴應。由於我可以自由滾動,因此應用程序本身仍然可以響應,因此我下載了一些內容。你知道解決這個問題的方法嗎? – maesydy
我認爲這是另一個問題本身,可能需要一個新的問題與更多的背景信息才能得到正確的答案。一個快速的想法是,它看起來像你在後臺使用服務下載,你只能有一個類型的服務同時運行,所以如果你已經下載了一些東西,並且你沒有在內部處理排隊該服務將失敗。再次,這只是一個猜測,因爲我不知道其餘的代碼。 –