2016-12-06 11 views
1

私はRecyclerviewをnestedscrollviewの中に持っています。そして、nestedscrollviewをbuttomの表示にスクロールして、より多くのリストをrecyclerviewにロードしたいと思います。endless load more recyclerviewネストされたスクロールの内部

ここは私の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> 

私はNestedScrollView内の私のRecyclerViewを入れて1つの問題を指摘しました。私は自分のRecyclerViewの内容をスクロールすることがスラックになっていることに気付きました。また、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方法を用い

2- recyclerviewにヘッダを追加します

私は第二の方法を好む:

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(); 
         } 
        } 
       } 
      } 
     }); 
    } 
関連する問題