Android 下载时在listview中显示progressbar

Android 下载时在listview中显示progressbar,android,listview,download,Android,Listview,Download,每个listview项目中都有一个“下载”按钮。单击该按钮时,它将启动一个工作线程来关闭文件。同时,按钮变为progressbar并显示进度 所以请告诉我一些正确的方法。使用AsyncTask,因为它有与主(UI)线程通信的特殊方法,尽管它是异步的 以下是一个例子: 类似这样的内容: public class DownloadTask extends AsyncTask<Void, Void, Boolean> { protected void onPreExecute()

每个listview项目中都有一个“下载”按钮。单击该按钮时,它将启动一个工作线程来关闭文件。同时,按钮变为progressbar并显示进度


所以请告诉我一些正确的方法。

使用AsyncTask,因为它有与主(UI)线程通信的特殊方法,尽管它是异步的

以下是一个例子:

类似这样的内容:

public class DownloadTask extends AsyncTask<Void, Void, Boolean> {

    protected void onPreExecute() {
            ProgressDialog() progress = new ProgressDialog(context);
            progress.setMessage("Loading ...");
            progress.show();
    }

    protected Boolean doInBackground(Void... arg0) {
          // Do work
         return true;
    }

    protected void onPostExecute(Boolean result) {
        progress.dismiss();
    }
}
new DownloadTask().execute();

您可能需要调整asynctask以满足您的需要,但这将帮助您开始。

asynctask是您需要的,但如果列表足够长,可以提供滚动和重复的getView()调用,则在列表项中显示进度条时,它并不能为您提供任何帮助。我所做的是,将HashMap映射位置保存到progressValue,在AsyncTask中,我更新此HashMap的progressValue并调用notifyDataSet。我在列表项中使用的进度条只是框架布局中的两个ImageView。实际上,让我困惑的是,当我在一个列表项中单击一个下载按钮时,进度条显示良好,但在我拉并刷新之后,另一个listview项目中的另一个progressbar也显示出来。这是因为我重复使用了如下视图:@Override public view getView(int position,view convertView,ViewGroup parent){if(convertView==null){convertView=inflater.inflate(R.layou.app_item,null);}AppItem AppItem=(AppItem)getItem(position);constructView(convertView,appItem);return convertView;}但是如果我删除if(convertView==null)…,滑动将不是很平滑。如何解决它?