Get visible items in RecyclerView

前端 未结 9 2195
礼貌的吻别
礼貌的吻别 2020-11-22 07:17

I need to know which elements are currently displayed in my RecyclerView. There is no equivalent to the OnScrollListener.onScroll(...) method on ListViews. I tried to work w

9条回答
  •  面向向阳花
    2020-11-22 07:59

    for those who have a logic to be implemented inside the RecyclerView adapter you can still use @ernesto approach combined with an on scrollListener to get what you want as the RecyclerView is consulted. Inside the adapter you will have something like this:

    @Override
        public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
            super.onAttachedToRecyclerView(recyclerView);
            RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();
            if(manager instanceof LinearLayoutManager && getItemCount() > 0) {
                LinearLayoutManager llm = (LinearLayoutManager) manager;
                recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
                    @Override
                    public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
                        super.onScrollStateChanged(recyclerView, newState);
                    }
    
                    @Override
                    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                        super.onScrolled(recyclerView, dx, dy);
                            int visiblePosition = llm.findFirstCompletelyVisibleItemPosition();
                            if(visiblePosition > -1) {
                                View v = llm.findViewByPosition(visiblePosition);
                                //do something
                                v.setBackgroundColor(Color.parseColor("#777777"));
                            }
                    }
                });
            }
        }
    

提交回复
热议问题