Android sticky header RecyclerView/ Section Header RecyclerView

匿名 (未验证) 提交于 2019-12-03 02:51:02

问题:

Hello All I have just created a demo to work with new android L widget RecyclerView.I have also implemented Pull-To-Refresh using SwipeRefreshLayout but problem for me now is how can I implement sticky header here,Because when i try to set

mRecyclerView.setOnScrollListener(new OnScrollListener() {      @Override     public void onScrolled(int arg0, int arg1) {      }      @Override     public void onScrollStateChanged(int arg0) {         // TODO Auto-generated method stub      } }); 

I get only these 2 methods so dont have any idea how can I handle this...

Please help..

回答1:

Since the previous answers don't provide a reliable solution, I propose my FlexibleAdapter library for RecyclerView, that is able to handle all following functionalities at once:

  • Sticky functionality for headers with Sections, works with all 3 LayoutManagers and with ViewPager too.
  • Selection Modes.
  • Multiple item types with auto-mapping.
  • Predefined ViewHolders.
  • Expandable items with Selection Coherence.
  • Draggable and Swipe-To-Dismiss.
  • Animated Async Filter with spannable text.
  • Scrolling Animations.
  • EndlessScroll with Adapter binding.
  • UndoHelper & ActionMode Helper.
  • FastScroller.
  • ...and more.

The idea behind is to avoid to create from scratch over again a custom Adapter for every project and to have more functionalities in one library, instead of relying on different libraries that support only 1 or 3 of them and that you cannot merge.



回答2:

public void onScrolled(int dx, int dy)

those are the two arguments that you're receiving onScrolled, that means, the number of pixels that the RecyclerView changed on the X and Y axis... so probably all you want to do is:

@Override public void onScrolled(int dx, int dy) {    if(dx < 0) // going up       showSitckyHeader(); } 

you can probably further improve this implementation by adding a minimum scroll amount. Something like:

int totalScrolled = 0; @Override public void onScrolled(int dx, int dy) {    totalScrolled += dx;    if(totalScrolled < MIN_SCROLL)       showSitckyHeader();    if(dx > 0)       totalScrolled = 0; }  @Override public void onScrollStateChanged(int newState) {    if(newState == SCROLL_STATE_IDLE || newState = SCROLL_STATE_SETTLING)        totalScrolled = 0; } 

or even go further and implement speed, counting time, but those types of implementation are more tricky, and you have to test it yourself.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!