ListView與RecyclerView的滑動監聽
阿新 • • 發佈:2019-01-29
ListView
mListView.setOnScrollListener(new OnScrollListener() { @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem == 0) { View firstVisibleItemView = mListView.getChildAt(0); if (firstVisibleItemView != null && firstVisibleItemView.getTop() == 0) { Log.d("ListView", "滾動到頂部"); } } else if ((firstVisibleItem + visibleItemCount) == totalItemCount) { View lastVisibleItemView = mListView.getChildAt(mListView.getChildCount() - 1); if (lastVisibleItemView != null && lastVisibleItemView.getBottom() == mListView.getHeight()) { Log.d("ListView", " 滾動到底部"); } } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { //do nothing } })
RecyclerView
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { //當前RecyclerView顯示出來的最後一個的item的position int lastPosition = -1; //當前狀態為停止滑動狀態SCROLL_STATE_IDLE時 if(newState == RecyclerView.SCROLL_STATE_IDLE){ RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); if(layoutManager instanceof GridLayoutManager){ //通過LayoutManager找到當前顯示的最後的item的position lastPosition = ((GridLayoutManager) layoutManager).findLastVisibleItemPosition(); }else if(layoutManager instanceof LinearLayoutManager){ lastPosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition(); }else if(layoutManager instanceof StaggeredGridLayoutManager){ //因為StaggeredGridLayoutManager的特殊性可能導致最後顯示的item存在多個,所以這裡取到的是一個數組 //得到這個陣列後再取到陣列中position值最大的那個就是最後顯示的position值了 int[] lastPositions = new int[((StaggeredGridLayoutManager) layoutManager).getSpanCount()]; ((StaggeredGridLayoutManager) layoutManager).findLastVisibleItemPositions(lastPositions); lastPosition = findMax(lastPositions); } //時判斷介面顯示的最後item的position是否等於itemCount總數-1也就是最後一個item的position //如果相等則說明已經滑動到最後了 if(lastPosition == recyclerView.getLayoutManager().getItemCount()-1){ showToast("mRecyclerView 滑動到底了"); } } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { } });