在这里,我试图将进度条从活动类更新为适配器类。 为此,我需要将int(连续变化)传递给适配器类。 可能是这个问题重复了,但是许多用户要求创建接口来调用和检索数据。 但是我不知道如何使用它。
以下代码的位置 活动..Asynctask ... doINBackground ..
filepath.putFile(URI).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progressIndouble = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
String id=a getTxt().toString();// this data is identification string to get position in list//
int progress=(int)progressIndouble;
// this variable i need to pass in adapter
}
});
适配器类
@Override
public void onBindViewHolder(@NonNull Viewholder viewHolder, int position) {
viewholder.progressbar.seProgress(retrieve data from activity)
}
答案 0 :(得分:0)
假设您使用以下数据结构来显示在列表中:
class ProgressHolder {
public int progress;
}
在onProgress中:
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
...
// Update data in your list,
// if your data structure is immutable don't forget to set new list to adapter
adapter.progressList.get(position).progress = progress;
// I used notifyDataSetChanged for simplicity,
// but you can use notifyItemChanged or DiffUtils
adapter.notifyDataSetChanged();
}
答案 1 :(得分:0)
在谈论Adapter
时,我假设您正在使用ListView
,并且您想更新Listview
中一项的进度。另外,适配器中应该有一个List
,以保持每个项目的进度。下面是实现它的伪代码。
在您的适配器中,您应该具有与此类似的代码
public void updateProgress(int progress, int itemPos) {
list.get(itemPos).progress = progress; // update the data in your list
notifyItemChanged(itemPos); // This will trigger a call to OnBindViewHolder
}
@Override
pubic void onBindViewHolder(@NonNull Viewholder viewHolder, int position) {
int progress = list.get(position).progress;
viewHolder.progressBar.setProgress(progress);
}
现在,从“活动”中调用updateProgress(),它将负责更新列表中的数据并刷新项目。