描述一个难题,请耐心等待
我在列表视图的每个列表项目中都有一个进度条,用于显示下载 现在更新单个视图我得到单个项目的视图对象 现在,此视图将传递给异步任务,以仅更新正在进行下载的视图
它工作正常,直到我滚动listview 当我滚动列表视图时,会显示列表视图的随机列表项目的进度条
调用asynctask的代码
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);
}
}
非常感谢任何参考/建议/示例。
答案 0 :(得分:1)
好的,如果我理解你的话,你的问题是ListView的适配器不会在每次滚动时创建新的列表项,它只是转换之前的。因此,如果它没有关于新的可见列表项的某些视图的特殊指示,它将像在此位置的先前列表项中那样绘制它们。 解决方案是在列表项中添加一些标志(如boolean isUpdating),并在适配器的getView方法中显示进度条(如果是),否则隐藏进度条