Как обновить процент выполнения загрузки в элементах программы повторного просмотра? - PullRequest
0 голосов
/ 08 мая 2019

Я хочу загрузить список файлов из моего приложения в Amazon S3 Bucket. Я могу получить прогресс загрузки, но мне не удалось установить значение прогресса загрузки в элементе просмотра переработчика. (Я хочу показать прогресс обмена файлами, как приложение Shareit, при совместном использовании файлов на другом устройстве.)

Я реализовал программу повторного просмотра, и она отлично работает. У меня есть индикатор выполнения и Textview для каждого файла, который будет загружен. Я просто хочу показать прогресс загрузки в индикаторе выполнения и в текстовом представлении каждого элемента.

public void onStateChanged(int id, TransferState state) {
    if (state.COMPLETED.equals(observer.getState())) {

        Toast.makeText(thisActivity, "File Upload Complete", Toast.LENGTH_SHORT).show();

    }

}

@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
    long _bytesCurrent = bytesCurrent;
    long _bytesTotal = bytesTotal;

    float percentage = (int) ((float)_bytesCurrent /(float)_bytesTotal * 100);
    Log.d("percentage","" + percentage);

}

@Override
public void onError(int id, Exception ex) {
    Toast.makeText(thisActivity, "" + ex.getMessage(), Toast.LENGTH_SHORT).show();
    Log.d("ErrorMessage","" + ex.getMessage());

}

// Ниже кода адаптера Recyclerview

public class FileListAdapter extends 
RecyclerView.Adapter<FileListAdapter.ViewHolder> {
public static ArrayList<String> filePaths;
private RecyclerViewClickListener clicklistener;
private int rowLayout;
private Context mContext;
private ImageView fileThumbnail, fileEdit, fileRemove;
private TextView filePath, fileSize, uploadPrtg;
public ProgressBar uploadProgs;
private int Progress;
private String ProgPos;

public FileListAdapter(ArrayList<String> filePaths, int rowLayout, Context context) {
    this.filePaths = filePaths;
    this.mContext = context;
    this.rowLayout = rowLayout;

}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View v = LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, false);
    return new ViewHolder(v);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

    if (ProgPos != null && ProgPos.equalsIgnoreCase(String.valueOf(position))){
        uploadProgs.setProgress((int) Progress);
        uploadPrtg.setText((int)(Progress)+"%");
    }
    Context context = holder.itemView.getContext();
    File file = new File(filePaths.get(position));
    String path = filePaths.get(position);

    String extension2 = file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf("/"));
    filePath.setText(extension2);

    long length = file.length() / 1024;
    fileSize.setText("Size :- " + length + " KB");




    String extension = file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf("."));

    if (extension.equalsIgnoreCase(".mp4")){
        fileEdit.setVisibility(View.VISIBLE);
    }

    if (path != null) {
        Glide.with(context)
                .load(path)
                .into(fileThumbnail);
    } else {
        fileThumbnail.setImageResource(R.drawable.ic_action_photo);
    }
}

public void updateProgress(float percentage, int position){
    ProgPos = String.valueOf(position);
    Progress = (int) percentage;
    filePaths.set(position, String.valueOf(percentage));
    notifyDataSetChanged();
}

@Override
public int getItemCount() {
    return filePaths.size();
}

public class ViewHolder extends RecyclerView.ViewHolder implements 
View.OnClickListener {

    ViewHolder(View view) {
        super(view);
        fileThumbnail = view.findViewById(R.id.file_thumbnail);
        filePath = view.findViewById(R.id.file_path);
        fileSize = view.findViewById(R.id.file_size);
        fileEdit = view.findViewById(R.id.editMyvid);
        fileRemove = view.findViewById(R.id.removeMyFile);
        uploadProgs = view.findViewById(R.id.progressBar);
        uploadProgs.setMax(100);
        uploadPrtg = view.findViewById(R.id.txtPercentage);

        fileEdit.setVisibility(View.GONE);

        view.setTag(view);
        fileEdit.setOnClickListener(this);
        fileRemove.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        if (clicklistener != null) {
            clicklistener.onItemClick(view, getAdapterPosition());
        }

    }
}

public void setClickListener(RecyclerViewClickListener itemClickListener) {
    this.clicklistener = itemClickListener;
}

public interface RecyclerViewClickListener {

    void onItemClick(View v, int position);

}

public void removeAt(int position) {
    filePaths.remove(position);
    notifyItemRemoved(position);
    notifyItemRangeChanged(position, filePaths.size());
}

Если кто-то захочет получить код адаптера утилита восстановления, я тоже могу его обновить. Пожалуйста, помогите мне сделать это. Заранее спасибо.

1 Ответ

0 голосов
/ 08 мая 2019
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
    long _bytesCurrent = bytesCurrent;
    long _bytesTotal = bytesTotal;

    float percentage = (int) ((float)_bytesCurrent /(float)_bytesTotal * 100);
    Log.d("percentage","" + percentage);
   adapter.updateProgress(percentage, position);// pass adapter list item position here 
}

Замена адаптера Вместо ArrayList<String> filePaths используйте ArrayList<FilesClass> filePaths и обновите свой адаптер соответственно

FilesClass.java

public class FilesClass {
    String FileName;
    Float Percentage;

    public FilesClass(String fileName, Float percentage) {
        FileName = fileName;
        Percentage = percentage;
    }

    public FilesClass() {
    }

    public String getFileName() {
        return FileName;
    }

    public void setFileName(String fileName) {
        FileName = fileName;
    }

    public Float getPercentage() {
        return Percentage;
    }

    public void setPercentage(Float percentage) {
        Percentage = percentage;
    }
}

и добавьте путь к файлу и прогресс по умолчанию 0.после использования этой пользовательской модели все ваши файлы и прогресс были переведены в один и тот же индекс. Затем,

public void updateProgress(float percentage, int position){
    ProgPos = String.valueOf(position);
    Progress = (int) percentage;
    filePaths.get(position).setPercentage(percentage);
    notifyItemChanged(position);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...