【问题标题】:How to set a progress for many progress-bars in RecyclerView如何在 RecyclerView 中为许多进度条设置进度
【发布时间】:2019-04-02 08:29:55
【问题描述】:

我正在使用 RecyclerView 以幻灯片和适配器的形式查看许多进度条。

这是我的适配器类

    public class RecAdapter extends RecyclerView.Adapter<RecAdapter.ViewHolder> {

private static final String TAG = "RecAdapter";
private ArrayList progressbars = new ArrayList<>();
private Context pcontex;
public RecAdapter(Context pcontex ,ArrayList progressbars) {
    this.progressbars = progressbars;
    this.pcontex = pcontex;
}
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.progress,viewGroup,false);
    ViewHolder holder = new ViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
    Log.d(TAG, "onBindViewHolder: called");
}

@Override
public int getItemCount() {
    return progressbars.size() ;
}
public class ViewHolder extends RecyclerView.ViewHolder {

    ProgressBar b ;
    ConstraintLayout parent;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
       b = itemView.findViewById(R.id.progressBar);
        parent= itemView.findViewById(R.id.parent);


       } 
    }
    }

我的 MainActivity 代码-

Prog = new ArrayList<>();  b2 = findViewById(R.id.progressBar) ;
b = findViewById(R.id.progressBar);  
probitmap();

private void probitmap(){

Log.d(TAG, "probitmap: preparing bit maps");
Prog.add(b); 
Prog.add(b2);

Recycle();// this method is out of on create
}

private void  Recycle(){

Log.d(TAG, "Recycle: init recycleview");
recyclerView =findViewById(R.id.Rec);
RecAdapter Adapter = new RecAdapter(this,Prog);
recyclerView.setAdapter(Adapter);
        LinearLayoutManager layoutManager
        = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(layoutManager);
}

代码运行良好,但我需要检索回收视图中的每个进度条并为每个进度条设置进度。

我尝试了多种方法,但都不起作用。这是我尝试过的-

for (int i = 0; i < recyclerView.getChildCount(); i++) {
        RecAdapter.ViewHolder holder = (RecAdapter.ViewHolder) recyclerView.findViewHolderForAdapterPosition(i);
        holder.b.setProgress(50);
    }

【问题讨论】:

    标签: java android android-recyclerview progress-bar android-progressbar


    【解决方案1】:

    使用OnBindViewHolder 管理回收器生成的每一“行”。

     @Override
     public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
            viewHolder.b.setProgress(progressbar.get(i)); //i is the position of the recycler
            viewHolder.b.setListener....
     }
    

    【讨论】:

    • 谢谢,但是 setprogress 方法需要一个整数,我没有 git :(
    • 为什么要使用监听器,对不起,我是初学者
    • Listener 只是一个例子。你可以从那里处理任何你想要的东西。用要传递给进度条的整数值填充适配器上的数组;为了。如果你在进度条中传递一个数组,你总是可以这样做:viewHolder.b.setProgress(progressbar.get(i).getProgress());
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 2012-11-10
    相关资源
    最近更新 更多