我正在开发一个Android项目,其中将有一个包含项目(行)的Recyclerview。在运行时,只要将项目(行)添加到Recyclerview,它就会开始上传到服务器并更新该项目(行)中的进度条。这里的每个项目都是一个文件。只要将项目添加到屏幕大小,一切都很顺利。每当项目超过屏幕限制时,我都需要滚动。在滚动时,进度条更新不同的项目。有时在两件或更多件物品上。经过Google搜索后,我明白这是因为Recyclerview重新使用已创建的查看器。
这是我的Recyclerview适配器代码:
public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView filename;
private ProgressBar file_progressbar;
public MyViewHolder(View v) {
super(v);
filename = (TextView) v.findViewById(R.id.filename);
file_progressbar = (ProgressBar) v.findViewById(R.id.file_progressbar);
}
}
public void onBindViewHolder(final MyViewHolder holder, final int position) {
final String fname = fDataset.get((fDataset.size() - 1) - position);
File f = new File(fname);
holder.filename.setText(f.getName());
if(internetchek.isNetworkAvailable(this.ctx))
{
holder.file_progressbar.setVisibility(View.VISIBLE);
upload up = new upload(this.ctx,fname,holder.file_progressbar,"uploadstart");
up.execute();
}
else {
Toast.makeText(this.ctx, "Offline", Toast.LENGTH_LONG).show();
}
}
我已将holder.file_progressbar传递给上传类。以便在Upload类中更新进度条。我不知道如何解决这个问题。提前致谢
答案 0 :(得分:2)
尝试为您的数据添加单独的标记,例如
private boolean isItemUpdating(int position) {
return mDataUpdatingFlags[position];
}
private void setItemUpdating(int position, boolean isUpdating) {
mDataUpdatingFlags[position] = isUpdating;
}
然后在onBindViewHolder
中调用这些方法来正确设置进度:
if (isItemUpdating(position) {
holder.showProgressBar();
} else {
holder.hideProgressBar();
}