我有一个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
我认为这是另一个问题本身,可能需要一个新的问题与更多的背景信息才能得到正确的答案。一个快速的想法是,它看起来像你在后台使用服务下载,你只能有一个类型的服务同时运行,所以如果你已经下载了一些东西,并且你没有在内部处理排队该服务将失败。再次,这只是一个猜测,因为我不知道其余的代码。 –