3

У меня есть RecyclerView, высота которого установлена ​​в wrap_content. Теперь мне нужно реализовать OnLoadMore, но есть проблема. я использовал,Android - OnLoadMore в RecyclerView с высотой wrap_content

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. Я думаю, что лучший способ сделать это, вызывает событие onLoadMore, когда становится видимым последний элемент RecyclerView. Я уже пытался сделать это с помощью метода 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 без использования событий прокрутки?

Update:

RecyclerView В отлично работает с android:layout_height:"wrap_content" и мои ScrollView прокручивается плавно.

Update 2:

Моя проблема в том, когда ваш RecyclerView высота wrap_content, Спиральные события RecyclerView не могут быть вызваны. Поэтому мне нужен альтернативный способ узнать, когда мой RecyclerView достигает конца своего списка и таким образом реализует событие OnLoadMore.

Update 3

Я упрощена XML, прежде чем я написал в вопросе ... В реальной XML, есть ViewPager вместо RecyclerView. И у меня есть 4 вкладки в том, что ViewPager, что каждая вкладка содержит RecyclerView с различным содержимым.

Выше этого ViewPager У меня есть информация о пользователе, и я хочу прокрутить их все вместе. Поэтому я поставил этот заголовок и ViewPager в ScrollView и установил высоту RecyclerView на wrap_content.

Вы можете посмотреть страницу профиля instagram. Я хочу, чтобы эта страница работала именно так.

Невозможно показать эту информацию в заголовке RecyclerView, потому что таким образом я должен добавить эту информацию в каждый RecyclerView на каждой вкладке.

+0

Что такое поддержка для Android версии Android? – Ironman

+0

@Ironman 24.2.1 – K2evil

+0

Зачем вам нужно, чтобы высота 'RecyclerView' была' wrap_content'? –

ответ

0

Вы должны держать ваш ViewPager и ваш RecyclerView Внутри NestedScrollView. Окончательный xml должен выглядеть так.

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

    <ViewPager/> 
    <RecyclerView/> 

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

И установить высоту вашего RecyclerView к match_parent.

У вас возникнет другая проблема. При загрузке RecyclerView страница будет автоматически прокручиваться вниз. Но есть решение для этого.

Добавление android:descendantFocusability="blocksDescendants" к макету ребенка в NestedScrollView, что предотвратит автоматическую прокрутку вниз.

Если вышеуказанное не работает, попробуйте установить nestedScrollView.scrollTo(0, 0); из вашего кода после загрузки RecyclerView.

+0

Спасибо ... Я постараюсь скоро и дам вам знать результаты. , – K2evil

Смежные вопросы