天天看点

【Android-Error】java.lang.IllegalStateException An instance of OnFlingListener already set.

在使用 snaphelper这个类的时候,好多时候会抛出一个异常"illegalstateexception an instance of

onflinglistener already set".

java.lang.IllegalStateException: An instance of OnFlingListener already set.
    at android.support.v7.widget.SnapHelper.setupCallbacks(SnapHelper.java:114)
    at android.support.v7.widget.SnapHelper.attachToRecyclerView(SnapHelper.java:102)
    at com.abc.ui.trm.TrCard.setupCardView(TrCard.java:62)
    at com.abc.ui.trm.TrCard.setupCardView(TrCard.java:29)
    at com.abc.ui.core.card.BaseCardView.processCardView(BaseCardView.java:134)
    at com.abc.ui.card.CardRecyclerAdapter.onViewAttachedToWindow(CardRecyclerAdapter.java:398)
    at android.support.v7.widget.RecyclerView.dispatchChildAttached(RecyclerView.java:6758)
    at android.support.v7.widget.RecyclerView$5.addView(RecyclerView.java:696)
    at android.support.v7.widget.ChildHelper.addView(ChildHelper.java:107)。。。。。。等等
           

在源码中可以看到

private void setupCallbacks() throws IllegalStateException {
        if (mRecyclerView.getOnFlingListener() != null) {
            throw new IllegalStateException("An instance of OnFlingListener already set.");
        }
        mRecyclerView.addOnScrollListener(mScrollListener);
        mRecyclerView.setOnFlingListener(this);
    }
           

直接说解决办法:

snapHelper.attachToRecyclerView(recyList)
           

之前加上一句代码:

recycler.setOnFlingListener(null);
           

大功告成

附上大神的解答

继续阅读