RecyclerView.Adapter onViewRecycled() не вызывается

66
6

У меня есть ViewHolder который подписывается на Rx Observable. Теперь мне нужно избавиться от одноразового использования, поэтому я делаю это в onViewRecycled() поскольку я читал, что он предназначен для освобождения ресурсов, однако он никогда не вызывается, даже не во время вращения. Это намеренное поведение?

Может быть, потому что у меня мало элементов, 5 из 3 видов? onDetachedFromRecyclerView, но Id нравится подписываться в конструкторе, а не каждый раз, когда он возвращается на экран/вне экрана

public class FeedAdapter {

onCreateViewHolder ..
onBindViewHolder..

@Override
public void onViewRecycled(RecyclerView.ViewHolder holder) {
super.onViewRecycled(holder);
// THIS IS WHAT I HAVE NEVER SEEN GET CALLED
if (holder instanceof FeaturedBooksHolder) {
((FeaturedBooksHolder) holder).dispose();
}
}

static class FeaturedBooksHolder extends BooksHolder {
private final Disposable mDisposable;

FeaturedBooksHolder(View itemView, OnBookClickListener listener, AdapterClickListener headerClickListener, Observable<Tuple2<Boolean, NativeAdsManager>> observable) {
super(itemView, listener, headerClickListener);
mRecyclerView = findById(itemView, recyclerView);

BooksAdapter adapter = createAdapter(context, listener);
UiUtils.initHorizontalRecyclerView(context, mRecyclerView, adapter);

mDisposable = observable.subscribe(tuple -> {
adapter.setShowAds(tuple.getFirst());
adapter.setAdsManager(tuple.getSecond());
});
}

void bindTo(FeaturedBooksFeaturedItem item) {
super.bindTo(item);
mImageView.setImageURI(item.getImageUrl());
mSubtitleTextView.setText(item.getSubtitle());
}

void dispose() {
if (mDisposable != null) mDisposable.dispose();
}
}
}

спросил(а) 2017-10-28T19:54:00+03:00 2 года, 8 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема