RecyclerView.Adapter onViewRecycled() 未调用

urS*_*Sus 5 android android-recyclerview

我有一个ViewHolder订阅了 Rx Observable。现在我需要处理一次性用品,所以我这样做了,onViewRecycled()因为我读过它应该是为了释放资源,但是它永远不会被调用,甚至轮换也不被调用。这是预期的行为吗?

可能是因为我的项目很少,5 个由 3 个视图类型组成?onDetachedFromRecyclerView被调用,但我想在构造函数中订阅,而不是每次它回到屏幕/屏幕外时

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)