Listview与下载水平进度条奇怪的行为

时间:2015-06-15 12:59:12

标签: android listview

我有自定义适配器,因为我有列表视图的设计自定义视图。在自定义视图行中,我指定了一个按钮和水平进度条,单击按钮开始下载进度。滚动列表视图时出现问题。假设我在第1位开始下载项目(当前进度50%),我滚动到最后一个。在我向上滚动并达到第一个时,我的第一个记录从(进度0%)开始。

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder = null;

    if(convertView == null) {

        holder = new ViewHolder();

        convertView = LayoutInflater.from(context).inflate(R.layout.list_items_aaj_ni_varta,parent, false);

        holder.txtTitle = (TextView) convertView.findViewById(R.id.txtTitle);
        holder.pBarDownloading = (ProgressBar) convertView.findViewById(R.id.pBarDownloading);
        holder.btnDownloadOrCancel = (ImageButton) convertView.findViewById(R.id.btnDownloadOrCancel);

        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.txtTitle.setText(listVarta.get(position).getVarta_title());

    holder.btnDownloadOrCancel.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            /*MyDownload is my custom design download class,
             * in that i have specified downloading task
            */
            MyDownload d = new MyDownLoad();
            d.setContext(context);
            d.setURl(url);
            d.setProgressBar(holder.pBarDownloading);

            d.startDownload();
        }
    });

    return convertView;
} 

1 个答案:

答案 0 :(得分:3)

ListView的重要功能是,它会回收其保存内存不可见的列表项。因此,您的视图状态将被重置,因为列表项将被回收。

一种可能的解决方案是保存适配器内某些列表或其他对象中每个项目的进度。从后台下载任务,您可以更新此数据。然后,在getView()方法中,您可以从此数据对象/列表中恢复进度。