Recyclerview中的进度条

时间:2016-04-16 16:21:47

标签: android android-recyclerview android-progressbar

我正在开发一个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类中更新进度条。我不知道如何解决这个问题。提前致谢

1 个答案:

答案 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();
}