Доступ к TextView и Progressbar в Recyclerview из IntentService
У меня есть просмотрщик, который имеет TextView (progresstxt) и Progressbar (downloadprogress) как часть надутых элементов.
Мне нужно знать, как я могу получить доступ к TextView и Progressbar в SimpleAdapter из IntentService, чтобы я мог обновить их значения?
Я пытаюсь добиться этого с BroadcastReceiver, но он не работает, TextView и Progressbar не обновляются.
Заранее спасибо.
Я получаю доступ к TextView и Progressbar через onBindViewHolder.
public class SimpleAdapter extends RecyclerView.Adapter<SimpleAdapter.SimpleViewHolder> implements FollowRedirectsCallback {
private final Context mContext;
private String recievedStr;
private int receivedProg;
private MyBroadcastReceiver myBroadcastReceiver;
private MyBroadcastReceiver_Update myBroadcastReceiver_Update;
public static class SimpleViewHolder extends RecyclerView.ViewHolder {
public final TextView title, progresstxt;
public ProgressBar downloadprogress;
public SimpleViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.simple_text);
progresstxt = (TextView) view.findViewById(R.id.progress_text);
downloadprogress = (ProgressBar) view.findViewById(R.id.progressdownload);
}
...
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
recievedStr = intent.getStringExtra(MoService.EXTRA_KEY_UPDATE);
//progresstxt.setText(result); ?
//how to access the TextView in onBindViewHolder?
}
}
public class MyBroadcastReceiver_Update extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
receivedProg = intent.getIntExtra(MoService.EXTRA_KEY_UPDATE_PROGRESS, 0);
//downloadprogress.setProgress(update); ?
//how to access the Progressbar in onBindViewHolder?
}
}
...
@Override
public void onBindViewHolder(final SimpleViewHolder holder, final int position) {
//
myBroadcastReceiver = new MyBroadcastReceiver();
myBroadcastReceiver_Update = new MyBroadcastReceiver_Update();
//register BroadcastReceiver
IntentFilter intentFilter = new IntentFilter(MoService.ACTION_MyIntentService);
intentFilter.addCategory(Intent.CATEGORY_DEFAULT);
mContext.registerReceiver(myBroadcastReceiver, intentFilter);
IntentFilter intentFilter_update = new IntentFilter(MoService.ACTION_MyUpdate);
intentFilter_update.addCategory(Intent.CATEGORY_DEFAULT);
mContext.registerReceiver(myBroadcastReceiver_Update, intentFilter_update);
//
holder.progresstxt.setText(recievedStr);
holder.downloadprogress.setProgress(receivedProg);
holder.progresstxt.setVisibility(View.VISIBLE);
holder.downloadprogress.setVisibility(View.VISIBLE);
//
}
mContext.unregisterReceiver(myBroadcastReceiver);
mContext.unregisterReceiver(myBroadcastReceiver_Update);
}
Через IntentService (MoService) выполняется несколько файловых операций, и я хочу получить доступ / обновить TextView и Progressbar из этого IntentService.
public class MoService extends IntentService {
public static final String ACTION_MyIntentService = "com.sample.RESPONSE";
public static final String ACTION_MyUpdate = "com.sample.UPDATE";
public static final String EXTRA_KEY_UPDATE = "EXTRA_UPDATE";
public static final String EXTRA_KEY_UPDATE_PROGRESS = "EXTRA_UPDATE_PROGRESS";
String message;
int mProgress;
..
public MoService() {
super("MyService");
}
@Override
public void onCreate() {
context = this;
super.onCreate();
}
@Override
protected void onHandleIntent(Intent intent) {
//
Intent intentUpdate = new Intent();
intentUpdate.setAction(ACTION_MyUpdate);
intentUpdate.addCategory(Intent.CATEGORY_DEFAULT);
intentUpdate.putExtra(EXTRA_KEY_UPDATE, message);
sendBroadcast(intentUpdate);
//
}
class MyDownloadDownloadStatusListener implements DownloadStatusListener {
@Override
public void onDownloadComplete(DownloadRequest request) {
message = "Status: completed...";
mProgress = 0;
progresstxt.setVisibility(View.GONE);
downloadprogress.setVisibility(View.GONE);
..
}
}
1 ответ
Есть несколько проблем с кодом. Вы не должны создавать новый Receiver в вашем методе onBindViewHolder. Должен быть один получатель, который обновляет список элементов, используемый вашим адаптером, и вызывает notifyDataSetChanged для адаптера.
Надеюсь, поможет