2016-12-06 108 views
1

我有Recyclerview裏面nestedscrollview,我想滾動nestedscrollview到buttom顯示加載和加載更多列表recyclerview。無盡的加載更多recyclerview內嵌套滾動android

這是我的xml。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="kh.com.iknow.endless.MainActivity"> 

    <android.support.v4.widget.NestedScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 
      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"> 
       <Button 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="Filter"/> 
       <Button 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:text="Sort"/> 
      </LinearLayout> 
      <android.support.v7.widget.RecyclerView 
       android:id="@+id/recycler_view" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:clipToPadding="false" 
       android:scrollbars="vertical" /> 
     </LinearLayout> 
    </android.support.v4.widget.NestedScrollView> 
</LinearLayout> 
+0

在這個看一看,瞭解如何使用這個概念https://github.com/codepath/android_guides/wiki/Endless-Scrolling-with-AdapterViews-and -RecyclerView –

+0

@kshitijjain如果'NestedScrollView'是一個滾動容器,你的代碼將不起作用。 – wonsuc

回答

0
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/off_white_bg" 
    android:orientation="vertical"> 

    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginTop="2dp" 
     android:fitsSystemWindows="true"> 

     <android.support.v4.widget.NestedScrollView 
      android:id="@+id/nestedScrollViewId" 
      android:layout_width="match_parent" 
      android:layout_height="fill_parent" 
      android:fillViewport="true"> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:focusableInTouchMode="true" 
       android:orientation="vertical" 
       app:layout_scrollFlags="scroll|enterAlways"> 

       <LinearLayout 
        android:id="@+id/permiumLAyout" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_below="@+id/divider" 
        android:layout_centerHorizontal="true" 
        android:layout_marginTop="10dp" 
        android:focusableInTouchMode="true" 
        android:gravity="center" 
        android:orientation="vertical" 
        android:visibility="visible"> 
        <!-- List view --> 

        <LinearLayout 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:background="@color/btn_br_color" 
         android:padding="3dp"> 

         <TextView 
          android:id="@+id/primiumGameNameText" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_gravity="fill" 
          android:layout_marginLeft="15dp" 
          android:gravity="center" 
          android:maxLines="4" 
          android:text="Primium Games" 
          android:textAppearance="@style/TextAppearance.AppCompat.Body1" 
          android:textColor="@color/row_text_color" 
          android:textSize="18sp" 
          android:textStyle="bold" /> 

        </LinearLayout> 

        <android.support.v7.widget.RecyclerView 
         android:id="@+id/recycler_view_primiumGameList" 
         android:layout_width="match_parent" 
         android:layout_height="match_parent" 
         android:isScrollContainer="false" 
         android:nestedScrollingEnabled="false" 
         android:paddingBottom="3dp" 
         android:paddingLeft="5dp" 
         android:paddingRight="5dp" 
         android:paddingTop="3dp" /> 

       </LinearLayout> 

      </LinearLayout> 

     </android.support.v4.widget.NestedScrollView> 

    </FrameLayout> 

</LinearLayout> 

我注意到一個問題把我RecyclerView的NestedScrollView內。我意識到,滾動我的RecyclerView slacking.Getting問題的內容。還有一個主要問題是在NestedScrollView內加載更多的數據獲取問題。 解決方法:使用負載更多類似這樣的

mRecAdapter = new RecyclerAdapter(recylerView, 
     primiumgameDetailsArrayList, getActivity(), cost); 
recylerView.setAdapter(mRecAdapter); 

//set load more listener for the RecyclerView adapter 
mRecAdapter.setOnLoadMoreListener(new OnLoadMoreListener() { 
    @Override 
    public void onLoadMore() { 
    **mRecyclerView.setNestedScrollingEnabled(false);** 
     if (reqCountStatus.equalsIgnoreCase("true")) { 
      primiumgameDetailsArrayList.add(null); 
      mRecAdapter.notifyItemInserted(primiumgameDetailsArrayList.size() - 1); 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 

        primiumgameDetailsArrayList.remove(primiumgameDetailsArrayList.size() - 1); 
        mRecAdapter.notifyItemRemoved(primiumgameDetailsArrayList.size()); 
        int index = primiumgameDetailsArrayList.size(); 
        primiumGameloadData(mRecyclerView, index); 
       } 
      }, 5000); 
     } else { 
      mRecyclerView.setNestedScrollingEnabled(false); 
      Toast.makeText(getActivity().getApplicationContext(), 
        "Loading data completed", Toast.LENGTH_SHORT).show(); 
     } 
    } 
}); 

注意事件:我已經用這種方法mRecyclerView.setNestedScrollingEnabled(false);禁用我的RecyclerView的滾動功能,並能夠在負載更多的數據mRecyclerView.setNestedScrollingEnabled(true)

+0

如果將代碼和解釋分開,會更好。 – wonsuc

+0

嗨,在這裏你可以發佈你的代碼是什麼'setOnLoadMoreListener'? – Munir

1

你能做到這一點的要求兩種方式:

1-添加報頭使用NestedScrolview

的setOnScrollChangeListener方法recyclerview

2-

我偏向於第二種方法:

NestedScrollView nestedSV = (NestedScrollView)  findViewById(R.id.nested_sync_scrollview); 

if (nestedSV != null) { 

     nestedSV.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { 
      @Override 
      public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { 
       String TAG = "nested_sync"; 
       if (scrollY > oldScrollY) { 
        Log.i(TAG, "Scroll DOWN"); 
       } 
       if (scrollY < oldScrollY) { 
        Log.i(TAG, "Scroll UP"); 
       } 

       if (scrollY == 0) { 
        Log.i(TAG, "TOP SCROLL"); 
       } 

       if (scrollY == (v.getChildAt(0).getMeasuredHeight() - v.getMeasuredHeight())) { 
        Log.i(TAG, "BOTTOM SCROLL"); 
        if (!isRecyclerViewWaitingtoLaadData) //check for scroll down 
        { 

         if (!loadedAllItems) { 
          showUnSentData(); 
         } 
        } 
       } 
      } 
     }); 
    }