2017-05-15 45 views
1

我試圖僅在滾動到recyclerView的特定元素時才顯示fab。 這是我的佈局,我想出了所有的短路目的。 因此,我希望它能夠顯示2,3,3 ...項目的晶圓廠,並且不會在我的RecyclerView的零和第一項上顯示它。在RecyclerView的指定元素上顯示浮動操作按鈕

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appBarLayout"> 

     <android.support.v7.widget.Toolbar 
     android:id="@+id/details_toolbar"/> 

     <include layout="@layout/divider" /> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/topic_content_recycler"/> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab"/> 
</android.support.design.widget.CoordinatorLayout> 

我發現什麼是隱藏在晶圓廠滾動,它看起來像這樣:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener(){ 
     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy){ 
      if (dy > 0) 
       fabAddNew.hide(); 
      else if (dy < 0) 
       fabAddNew.show(); 
     } 
    }); 

我想寫得很好的解決方案。 (我假設有一個,由谷歌提供,但我不能資助它) 謝謝。

+0

將它隱藏起來會比用編程方式添加它容易得多 –

回答

1

添加RecyclerView.OnScrollListener,並使用onScrollStateChanged(RecyclerView recyclerView, int newState)回調,讓你的newState,你應該使用SCROLL_STATE_IDLE to fetch its position.這意味着位置變化和滾動停止,現在你可以檢查哪些項目可見與這個

recyclerView.getLayoutManager().findFirstVisibleItemPosition(); 

幫助現在您可以使用下面的代碼,並改變它相應

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 

    @Override 
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
     super.onScrolled(recyclerView, dx, dy); 
     if (dy > 0) { 
      // Scrolling up 
     } else { 
      // Scrolling down 
     } 
    } 

    @Override 
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
     super.onScrollStateChanged(recyclerView, newState); 

     if (newState == AbsListView.OnScrollListener. SCROLL_STATE_IDLE) { 
      //you can change the position according to your need 
     if(recyclerView.getLayoutManager().findFirstVisibleItemPosition()<2) 
      { 
      fabAddNew.hide(); 
      } 
     else{ 
      fabAddNew.show(); 
      }    
     } 
    } 
}); 

你可以閱讀文檔here for more detail

+0

謝謝。這適用於一些改進。我用findFirstCompletelyVisibleItemPosition檢查枯萎我滾動到正確的位置。 findFirstVisibleItemPosition不起作用。另外,狀態只在滾動狀態改變時才改變,所以我使用onScrolled方法。 –