3

Ich habe RecyclerView, deren Höhe auf wrap_content festgelegt ist. Jetzt muss ich OnLoadMore implementieren, aber es gibt ein Problem. I verwendet,Android - OnLoadMore in RecyclerView mit wrap_content Höhe

RecyclerView.OnScrollListener.onScrolled(RecyclerView recyclerView, int dx, int dy) 

Aber es ist nicht aufgerufen werden kann, da meine RecyclerView bewegen sich nicht. Seine Höhe ist 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> 

Also muss ich einen anderen Ansatz verwenden, um weitere Seiten zu RecyclerView geladen. Ich denke, der beste Weg, dies zu tun, ruft onLoadMore Ereignis, wenn der letzte Artikel von RecyclerView sichtbar werden. Ich habe bereits versucht, dies von onBindViewHolder Methode im Adapter zu tun, aber alle Seiten insgesamt geladen.

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(); 
     } 
    } 
} 

Was ist die Alternative Art und Weise onLoadMore zu implementieren, ohne Scroll-Ereignisse zu verwenden?

Update:

Die RecyclerView funktioniert perfekt mit android:layout_height:"wrap_content" und meine ScrollView Rollen reibungslos.

Update 2:

Mein Problem ist, wenn Ihr RecyclerView Höhe wrap_content, Scroll-Ereignisse von RecyclerView kann nicht aufgerufen werden soll. Also brauche ich einen alternativen Weg, um herauszufinden, wann mein RecyclerView Ende seiner Liste erreicht und OnLoadMore Ereignis auf diese Weise implementieren.

Update 3

I xml vereinfacht, bevor ich es in Frage geschrieben ... In realen xml, ist es ViewPager anstelle des RecyclerView. Und ich habe 4 Registerkarten in diesem ViewPager, dass jede Registerkarte eine RecyclerView mit unterschiedlichen Inhalten enthält.

Über diesem ViewPager habe ich einige Informationen über Benutzer und ich möchte alle zusammen scrollen. Also setze ich diesen Header und ViewPager in einen ScrollView und setze die Höhe von RecyclerView auf wrap_content.

Sie können sich die Profilseite von instagram ansehen. Ich möchte auf dieser Seite so arbeiten.

Es ist nicht möglich, diese Informationen im Header von RecyclerView anzuzeigen, weil auf diese Weise ich diese Informationen in jedem RecyclerView in jeder Registerkarte hinzufügen sollte.

+0

Was ist Support-Bibliothek Android-Version, die Sie verwenden? – Ironman

+0

@Ironman 24.2.1 – K2evil

+0

Warum brauchen Sie die 'RecyclerView'-Höhe, um' wrap_content' zu sein? –

Antwort

0

Sie benötigen ViewPager und Ihre RecyclerView innerhalb eines NestedScrollView zu halten. Das endgültige XML sollte so aussehen.

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

    <ViewPager/> 
    <RecyclerView/> 

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

und stellen Sie die Höhe Ihres RecyclerView-match_parent.

Sie werden hier ein anderes Problem haben. Die Seite scrollt automatisch nach unten, wenn die RecyclerView geladen wird. Aber es gibt auch eine Lösung.

Hinzufügen von android:descendantFocusability="blocksDescendants" zum untergeordneten Layout in NestedScrollView, wodurch das automatische Scrollen nach unten verhindert wird.

Wenn das obige nicht funktioniert, versuchen Sie nestedScrollView.scrollTo(0, 0); aus Ihrem Code, nachdem die RecyclerView mit Elementen geladen ist.

+0

Danke ... Ich werde es bald versuchen und Ihnen die Ergebnisse wissen lassen .. . – K2evil

Verwandte Themen