Tak więc kilka tygodni temu zadałem to pytanie: recyclerview periodic ui child updates.Używanie RxJava wewnątrz adaptera RecyclerView
A dziś chcę, aby tę funkcję zastąpić za pomocą Rxjava. W rzeczywistości jest to bardzo proste, wykonuję się w następujący sposób:
@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();
}
}
Problem jest jednak inny. Mam nawigacjęDrawer zaimplementowaną z Aktywnościami, które są wstrzymane i nie są niszczone po przełączeniu. Tak więc, po przejściu na działanie, które nie zawiera tego adaptera, obserwowalne wysyła dalej rzeczy, ponieważ jest to okresowa przerwa Obserwowalna. Moje pytanie brzmi: co powinienem zrobić? Muszę zrezygnować z subskrypcji, gdy działanie zostało wstrzymane, ale nie mam pojęcia, od kiedy, a także jak zasubskrybować z powrotem. Jakaś pomoc lub pomysły?
czy powinienem dokonać sprawdzenia onNext i nic nie robić, jeśli działanie zostało wstrzymane? –