The OnFlingListener instance is already installed in Recyclerview

I am using RecyclerView in my android application. I have many maps in my RecyclerView, so only 1 map is displayed to the user. The user must scroll to see the next map.

I ran into a problem when the user does a swipe, recyclerview gets the scroll to the end. Instead, I need, when the user performs a search, displays the next map for the user, as indicated in this post.

How to make napkins on a horizontal recyclerview to bring only the next element in sight - Android

SnapHelper snapHelper = new PagerSnapHelper(); snapHelper.attachToRecyclerView(recyclerView); 

I tried the answer mentioned in the link above. But I get an exception when the user does a swipe.

Please help me solve the problem.

Error

 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) at android.support.v7.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:7697) at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:7655) at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:7643) at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1539) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1488) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:585) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3506) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3254) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3767) at android.view.View.layout(View.java:18799) at android.view.ViewGroup.layout(ViewGroup.java:5952) at com.abc.ui.core.refresh.LegacySwipeRefreshLayout.onLayout(LegacySwipeRefreshLayout.java:337) at android.view.View.layout(View.java:18799) at android.view.ViewGroup.layout(ViewGroup.java:5952) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:18799) at android.view.ViewGroup.layout(ViewGroup.java:5952) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079) at android.view.View.layout(View.java:18799) at android.view.ViewGroup.layout(ViewGroup.java:5952) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:18799) at android.view.ViewGroup.layout(ViewGroup.java:5952) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:18799) at android.view.ViewGroup.layout(ViewGroup.java:5952) at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1193) at android.view.View.layout(View.java:18799) at android.view.ViewGroup.layout(ViewGroup.java:5952) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:18799) at android.view.ViewGroup.layout(ViewGroup.java:5952) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585) at android.widget.LinearLayout.onLayout(LinearLayout.java:1494) at android.view.View.layout(View.java:18799) at android.view.ViewGroup.layout(ViewGroup.java:5952) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at com.android.internal.policy.DecorView.onLayout(DecorView.java:822) at android.view.View.layout(View.java:18799) at android.view.ViewGroup.layout(ViewGroup.java:5952) 
+13
source share
4 answers

I managed to get around this by adding this line

 recyclerView.setOnFlingListener(null); 

before

 snapHelper.attachToRecyclerView(recyclerView); 
+31
source

All you have to do is post

 SnapHelper snapHelper = new PagerSnapHelper(); snapHelper.attachToRecyclerView(recyclerView); 

inside onCreateViewHolder instead of onBindViewHolder

+3
source

You can check the OnFlingListener on the RecyclerView before adding it

 if (recycler.getOnFlingListener() == null) snapHelper.attachToRecyclerView(recycler); 
+2
source

Put the following line:

 mRecyclerView.setOnFlingListener(null); 

Above this line:

 new LinearSnapHelper().attachToRecyclerView(mRecyclerView) 
0
source

All Articles