1

有点难描述的问题,请耐心等待

我在列表视图的每个列表项中都有一个进度条,用于显示现在正在下载以更新单个视图我得到单个项目的视图对象现在此视图被传递给异步任务以仅更新正在进行下载的视图

它工作正常,直到我滚动列表视图时,当我为列表视图的一些随机列表项显示进度条时

调用异步任务的代码

 ListView lv = getListView();
 int visiblePosition = lv.getFirstVisiblePosition();
 View v = lv.getChildAt(position - visiblePosition);
 v.setClickable(true);
 task = new TestLoadingTask();
 task.v = lv.getChildAt(position - visiblePosition);
 executeAsyncTask(task, null, null, null);

关于异步任务的进度更新

            @Override
    protected void onProgressUpdate(Object... values) {
        super.onProgressUpdate(values);
        progress[currentposition] = (Integer)values[0];
        max[currentposition] = 100;
        updateprogress(currentposition,v);
    }


    public void updateprogress(int position,View v)
  {

    ProgressBar update = (ProgressBar)v.findViewById(R.id.downloadbar);
    if(max!=null && max[position]!=0)
        update.setMax(max[position]);
    if(progress!=null)
        update.setProgress(progress[position]);
    TextView tv_per = (TextView) v.findViewById(R.id.percentage);
    if(progress[position]==max[position])
    {
        tv_per.setVisibility(View.GONE);
        update.setVisibility(View.GONE);
    }
    else
    {
        tv_per.setVisibility(View.VISIBLE);
        tv_per.setText(progress[position]+"/"+max[position]);
        update.setVisibility(View.VISIBLE);
    }
}

任何参考/建议/示例将不胜感激。

4

1 回答 1

1

好的,如果我理解正确,您的问题是 ListView 的适配器不会在您每次滚动时创建新的列表项,它只是转换以前的。因此,如果它没有关于新可见列表项的某些视图的特殊说明,它将像在此位置的先前列表项中一样绘制它们。解决方案是在您的列表项中添加一些标志(如布尔 isUpdating),如果为真,则在适配器的 getView 方法中显示进度条,否则隐藏进度条

于 2012-09-24T11:03:25.687 回答