Android ResultReceiver обновляет представления в RecyclerView - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь обновить TextView и ProgressBar в адаптере, используя Result Receiver и Intent Service, но я немного запутался, как его обновить.

Resce Receiver:

    private ResultReceiver myRR = new ResultReceiver(new Handler()) {
        @Override
        protected void onReceiveResult(int resultCode, Bundle resultData) {
            super.onReceiveResult(resultCode, resultData);

            if (resultCode == DownloadService.UPDATE_PROGRESS) {

                int progress = resultData.getInt("progress"); //get the progress

                new Handler(Looper.getMainLooper()).post(() -> {
//                            holder.downloadStatus.setText("Downloading...");
//                            holder.progressBar.setProgress(progress);
                });

//                Log.d(TAG, "onReceiveResult - Adapter: " + progress); // It works

                if (progress == 100) {

                    new Handler(Looper.getMainLooper()).post(() -> {

//                        holder.downloadStatus.setText("Downloaded");
//                        holder.progressBar.setProgress(progress);

//                        Glide.with(mContext)
//                            .load(R.drawable.ic_play)
//                            .into(holder.ivEpisodeFile);
//
//                        holder.clDownload.setVisibility(View.GONE);
                    });

                }
            }
        }
    };

Адаптер:

@Override
public void onBindViewHolder(final EpisodeLineHolder holder, final int position) {
    final Episode episodes = episodesList.get(position);
    holder.ivEpisodeFile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    Intent downloadIntent = new Intent(mContext, TestService.class);
                    downloadIntent.setAction(ACTION_START_DOWNLOAD);
                    downloadIntent.putExtra("receiver", myRR);
                    downloadIntent.putExtra("url", episodes.getAudioFile());
                    downloadIntent.putExtra("filename", fileName);
            }
    }
}

Я могу получать результаты в Resce Receiver, но не могу обновить представления.Я знаю, что мне нужно обновить представления в onBindViewHolder, но как я могу это сделать, используя результаты Result Receiver?

Я пробую это весь день, я искал по всему Интернету, но явсе еще застрял.

Я все не так в этом решении?Кроме того, как я могу по-прежнему обновлять представления, когда действие останавливается и возобновляется позже?Возможно ли это?

РЕДАКТИРОВАТЬ 1

Если я переместу myRR на onBindViewHolder, это будет работать во время выполнения действия, но когда оно остановлено и возобновлено, оноперестает обновлять представления.

@Override
public void onBindViewHolder(final EpisodeLineHolder holder, final int position) {
    ResultReceiver myRR = new ResultReceiver(new Handler()) {
        ...
    }
}    
...