2017-05-18 87 views
3

我在我的Android應用中使用了RecyclerView。我在我的RecyclerView中有很多cardview,每次只向用戶顯示1個cardview。用戶必須滑動才能看到下一張卡片。OnFlingListener的一個實例已經在Recyclerview中設置了

我遇到了一個問題,當用戶進行滑動時,recyclerview會滾動到最後。相反,我需要的是當用戶滑動時,按照本文中提到的將下一張牌顯示給用戶。

How to make swipe on horizontal recyclerview bring only the next item into view - Android

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

我試着在上面的鏈接中提到的答案。但是,當用戶進行滑動時,我收到了一個異常。

請幫我解決它。

錯誤

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) 
+0

這是否幫助任何來解答呢? http://stackoverflow.com/questions/26370289/snappy-scrolling-in-recyclerview – Nabin

+0

看到它的第二個答案和評論。 :) – Nabin

回答

14

我設法與加入這一行

recyclerView.setOnFlingListener(null); 

snapHelper.attachToRecyclerView(recyclerView); 
+0

簡單而簡單的解決方案。這可能是一個拙劣的解決方案,但據我看到SnapHelper的複雜實現,這是最好的解決方案,應該是被接受的答案。 – Opiatefuchs

+0

添加clearOnScrollListeners()和setOnFlingListener(null)解決了我的問題 – Kiran

+0

沒有解決我的問題。 –

相關問題