3

wrap_contentの高さに設定されたRecyclerViewがあります。今私はそれにOnLoadMoreを実装する必要がありますが、問題があります。 私は Android - wrap_contentの高さを持つRecyclerViewのOnLoadMore

RecyclerView.OnScrollListener.onScrolled(RecyclerView recyclerView, int dx, int dy) 
を使用しかし、私の RecyclerViewがスクロールしないので、それが呼び出されません。その高さは wrap_contentです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/root_rtl" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/white"> 

    <include 
     android:id="@+id/tool_bar" 
     layout="@layout/toolbar" /> 

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@id/tool_bar"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      tools:context="com.yarima.msn.Activities.ProfileActivity"> 

      <FrameLayout 
       android:id="@+id/FRAGMENT_PLACEHOLDER" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="@color/white"> 

       <!-- Some Content That I want to scroll with recyclerview --> 
      </FrameLayout> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/recyclerview_posts" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:scrollbars="vertical" 
       android:bellow="@id/FRAGMENT_PLACEHOLDER"/> 
     </RelativeLayout> 
    </ScrollView> 

</RelativeLayout> 

したがって、別の方法を使用してRecyclerViewにページを読み込む必要があります。 これを行う最善の方法は、RecyclerViewの最後の項目が表示されたときにonLoadMoreイベントに電話することです。私はすでにアダプターのonBindViewHolderメソッドからこれをやろうとしましたが、すべてのページがすべてロードされました。

if(getItemCount()-position == 1 && onLoadMoreListener != null){ 
    if (recyclerView != null) { 
     visibleItemCount = recyclerView.getChildCount(); 
     totalItemCount = recyclerView.getLayoutManager().getItemCount(); 
     firstVisibleItem = ((LinearLayoutManager)recyclerView.getLayoutManager()).findFirstVisibleItemPosition(); 
     if (loading) { 
      if (totalItemCount > previousTotal) { 
       loading = false; 
       previousTotal = totalItemCount; 
      } 
     } 
     if (!loading && (totalItemCount - visibleItemCount) 
       <= (firstVisibleItem + visibleThreshold)) { 
      loading = true; 
      onLoadMoreListener.onLoadMore(); 
     } 
    } 
} 

スクロールイベントを使用せずにonLoadMoreを実装するための別の方法は何ですか?

アップデート:android:layout_height:"wrap_content"と完全に

RecyclerView作品とスムーズに私のScrollViewスクロールします。

アップデート2:あなたのRecyclerView高さがwrap_contentときに私の問題がある

RecyclerViewのスクロールイベントが起動することはできません。だから、私のRecyclerViewがそのリストの終わりに達したときにそれを見つけて、OnLoadMoreイベントをそのように実装する代わりの方法が必要です。

アップデート3

私は質問にそれを書いた前に、私は、XMLを簡素化...本当のXMLでは、ViewPager代わりのRecyclerViewがあります。そして私はViewPagerに4つのタブがあり、それぞれのタブには内容が異なるRecyclerViewが含まれています。

上記のうちViewPager私はユーザーに関するいくつかの情報を持っており、それらを一緒にスクロールしたいと思います。だから私はこのヘッダとViewPagerScrollViewに入れ、RecyclerViewの高さをwrap_contentに設定しました。

instagramのプロフィールページをご覧ください。私はこのページのように動作します。

この情報をRecyclerViewのヘッダーに表示することはできません。この方法では、すべてのタブの各RecyclerViewにこの情報を追加する必要があるからです。

+0

あなたが使っているサポートライブラリアンドロイド版は何ですか? – Ironman

+0

@Ironman 24.2.1 – K2evil

+0

なぜあなたは 'RecyclerView'の高さを' wrap_content'にする必要がありますか? –

答えて

0

にスクロールイベントを見ることができます。最終的なXMLは次のようになります。

<android.support.v4.widget.NestedScrollView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <ViewPager/> 
    <RecyclerView/> 

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

そして、あなたのRecyclerViewmatch_parentの高さを設定します。

あなたは別の問題に直面します。 RecyclerViewが読み込まれると、ページは自動的に下にスクロールします。しかし、それにも解決策があります。

NestedScrollViewの子レイアウトにandroid:descendantFocusability="blocksDescendants"を追加すると、自動的に下にスクロールできなくなります。

上記のコードが機能しない場合は、RecyclerViewにアイテムが読み込まれた後にコードからnestedScrollView.scrollTo(0, 0);を設定してみてください。

+0

ありがとう...私はすぐにそれを試し、結果を知らせます。 。 – K2evil

関連する問題