Я пытаюсь обновить 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()) {
...
}
}