Как снова прикрепить asynctask к viewHolder itemview, когда возвращаетесь к текущей активности? - PullRequest
0 голосов
/ 13 марта 2020

Я думаю, что этот вопрос может быть задан, а также может быть на плохом языке. ТАК моя кодировка

  1. Активность ... recyclerview
  2. Класс адаптера
  3. MyViewHolder внутренний класс класса адаптера
  4. AsyncTask inner класс класса адаптера

    public static class MyViewHolder extends RecyclerView.ViewHolder { 
            Progressbar progressbar;
            public MyViewHolder(View itemView) {
            super(itemView);
    
            progressbar= (Progressbar ) itemView.findViewById(R.id.progressbar_item);
            progressbar.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    new DownloadAudioFromURL(new AsyncResponse() {
                        @Override
                        public void downloadProgress(int progress) {
                            progressbar.setProgress(progress);
    
                        }
                    }).execute(params);
                }
            });
        }
    }
    

Это AsyncTask

 class DownloadAudioFromURL extends AsyncTask<MyTaskParams, Integer, Boolean> {
            public AsyncResponse delegate = null;
            public DownloadAudioFromURL(AsyncResponse delegate){
                this.delegate = delegate;
            }
            String audiopath=null;
            int position=-1;

            @Override
            protected Boolean doInBackground(MyTaskParams... params) {
                position=params[0].position;
                int count;
                try {

                    //downloading codes
                } catch (Exception e) {
                    Log.e("Error: ", e.getMessage());
                }
                audiopath=path;
                return true;
            }


            @Override
            protected void onProgressUpdate(Integer... values) {
                super.onProgressUpdate(values);
                int progress=0;
                if (!(values[0] ==progress))
                {
                    delegate.downloadProgress(values[0]);//callback for progress
                    progress=values[0];
                }
            }
        }

Этого кода достаточно для обновления индикатора выполнения внутри viewView ViewHolder до текущего состояния активности. Но проблема заключается в том, что всякий раз, когда go возвращается из этого действия и возвращается снова, представление элемента viewHolder сбрасывается, и в прогрессбар не обнаруживается прогресс, в консоли отображается только фоновый поток. другими словами, itemview и Asynctask не связаны после выхода из действия. Итак, как постоянно обновлять этот viewHolder ProgressBar, пока AsyncTask не завершит работу sh.

...