So vor ein paar Wochen habe ich diese Frage gestellt: recyclerview periodic ui child updates.Verwenden von RxJava in RecyclerView Adapter
Und heute möchte ich diese Funktionalität mit Rxjava umgestalten. Es ist eigentlich ziemlich einfach, ich beende den folgenden Weg:
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (friend.getGameStatus().equals(GameStatus.INGAME)) {
holderOnline.startRepeatingTask();
} else {
holderOnline.stopRepeatingTask();
}
}
class MyViewHolderOnline extends RecyclerView.ViewHolder {
private Subscription subscribe;
public MyViewHolderOnline(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
public void startRepeatingTask() {
subscribe = Observable.interval(updateInterval, TimeUnit.MILLISECONDS)
.map(aLong -> current.getGameStatusToPrint())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<String>() {
@Override public void onCompleted() { }
@Override public void onError(Throwable e) { }
@Override
public void onNext(String gameStatusToPrint) {
gameStatus.setText(gameStatusToPrint);
}
});
}
void stopRepeatingTask() {
if(subscribe != null && !subscribe.isUnsubscribed())
subscribe.unsubscribe();
}
}
Das Problem ist jedoch anders. Ich habe einen navigationDrawer implementiert mit Aktivitäten, die pausiert sind und nicht zerstört werden, wenn sie geschaltet werden. Nachdem ich also zu der Aktivität gewechselt habe, die diesen Adapter nicht enthält, sendet das Observable weiterhin Daten, weil es ein periodisches Intervall Observable ist. Also meine Frage ist, was soll ich tun? Ich muss mich abmelden, wenn die Aktivität pausiert ist, aber ich habe keine Ahnung, wie seit, und auch, wie man sich zurückmeldet. Irgendwelche Hilfe oder Ideen? So
oder sollte ich nur onNext überprüfen und nichts tun, wenn die Aktivität pausiert ist? –