如何将连续数据从活动传递到适配器?

时间:2019-12-04 14:47:33

标签: android android-recyclerview android-adapter

在这里,我试图将进度条从活动类更新为适配器类。 为此,我需要将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)
    }

2 个答案:

答案 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(),它将负责更新列表中的数据并刷新项目。