gpt4 book ai didi

android - 在 ListView 滚动问题中更新单个项目 View

转载 作者:行者123 更新时间:2023-11-30 04:00:34 25 4
gpt4 key购买 nike

描述有点难,请耐心等待

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

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

调用异步任务的代码

 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);
}
}

任何引用/建议/示例将不胜感激。

最佳答案

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

关于android - 在 ListView 滚动问题中更新单个项目 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12563163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com