yuyakaido / CardStackView

📱Tinder like swipeable card view for Android
Apache License 2.0
2.37k stars 448 forks source link

Crash while removing adapter #262

Open rafalolsz opened 5 years ago

rafalolsz commented 5 years ago

I need to remove adapter from CardStackView, because of some memory leaks. And I can't because there is a registerAdapterDataObserver called on adapter without checking if new adapter is null.

rafalolsz commented 5 years ago

We also don't need to set default layout manager, so we can change setAdapter method to something like this:

    public void setAdapter(Adapter adapter) {
        if (adapter != null) {
            adapter.registerAdapterDataObserver(observer);
            if (getLayoutManager() == null) {
                setLayoutManager(new CardStackLayoutManager(getContext()));
            }
        }
        // Imitate RecyclerView's implementation
        // http://tools.oesf.biz/android-9.0.0_r1.0/xref/frameworks/base/core/java/com/android/internal/widget/RecyclerView.java#1005
        if (getAdapter() != null) {
            getAdapter().unregisterAdapterDataObserver(observer);
            getAdapter().onDetachedFromRecyclerView(this);
        }
        super.setAdapter(adapter);
    }

I don't have access to push this fix by myself.