2017-02-14 74 views
0

我想为recyclerview分页,但在我的情况下,recyclerView是在ScrollView中。所以onscrollListener不按预期工作。所以我打算找到滚动视图的滚动结束并将触发下一个页面请求。Recyclerview onscrolllistener在ScrollView里面的RecyclerView不工作

这是一个很好的解决方案还是有人有一个更好的主意?

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:orientation="vertical"> 

     <ScrollView android:layout_width="match_parent" 
        android:layout_height="match_parent" android:fillViewport="false"> 
      <LinearLayout android:layout_width="match_parent" 
          android:orientation="vertical" 
          android:layout_height="wrap_content"> 


       <FrameLayout android:id="@+id/headerContainer" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content"/> 

       <android.support.v4.view.ViewPager 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"/> 

      </LinearLayout> 
     </ScrollView> 


</LinearLayout> 
+0

这不是把RecyclerView内滚动视图的好方法为什么你想要scrollView? –

+0

有2个滚动视图总是不好的主意。为什么你需要ScrollView? – X3Btel

+0

其实我需要一个滚动视图,因为整个内容应该滚动。内容包括一个标题区域,并在其下面带有标签的ViewPage。 – Krish

回答

0

您可以使用下面的代码拦截RecyclerView卷轴和可以微调重要的是基础的滚动事件,我希望它帮

mList.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() { 
      float rawX; 
      int mSlop = ViewConfiguration.get(getActivity()).getScaledTouchSlop(); 

      @Override 
      public boolean onInterceptTouchEvent(RecyclerView v, MotionEvent event) { 
       switch (event.getActionMasked()) { 
        case MotionEvent.ACTION_DOWN: 
         v.getParent().requestDisallowInterceptTouchEvent(true); 
         rawX = event.getRawX(); 
         break; 
        case MotionEvent.ACTION_CANCEL: 
        case MotionEvent.ACTION_UP: 
         v.getParent().requestDisallowInterceptTouchEvent(false); 
         rawX = 0f; 
         break; 
        case MotionEvent.ACTION_MOVE: 
         if (Math.abs(rawX - event.getRawX()) > mSlop) 
          v.getParent().requestDisallowInterceptTouchEvent(true); 
         break; 
       } 
       return false; 
      } 

      @Override 
      public void onTouchEvent(RecyclerView rv, MotionEvent e) { 

      } 

      @Override 
      public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

      } 
     }); 
相关问题