안 드 로 이 드 에서 Recycle View 는 끝까지 내 려 가 는 감청 예 시 를 추가 합 니 다.
4607 단어 recycleviewandroid
안 타 깝 게 도android-Ultra-Pull-To-Refresh드 롭 다운 리 셋 기능 만 제 공 했 을 뿐 목록 류 의 구성 요소 에 대해 저 희 는 일상 개발 에서 위로 끌 어 올 리 거나 끝까지 미 끄 러 지 는 자동 로드 기능 을 더 많이 사용 합 니 다.물론 현재 로 서 는 사용자 들 이 끝까지 미 끄 러 지 는 자동 로드 기능 을 더 좋아 합 니 다.예 를 들 어 오늘 말 한 recycleview 는 우리 스스로 미끄럼 부 에 더 많은 기능 을 추가 할 수 밖 에 없다.
그것 의 실현 원 리 는 신마 입 니 다.아주 간단 합 니 다.
Recycle View 내부 에 스크롤 이 벤트 를 수신 하기 위해 슬라이딩 감청 추상 클래스 OnScroll Listener 가 있 는데,이 중 두 가지 실현 방법 이 있 습 니 다.
public abstract static class OnScrollListener {
/**
* Callback method to be invoked when RecyclerView's scroll state changes.
*
* @param recyclerView The RecyclerView whose scroll state has changed.
* @param newState The updated scroll state. One of {@link #SCROLL_STATE_IDLE},
* {@link #SCROLL_STATE_DRAGGING} or {@link #SCROLL_STATE_SETTLING}.
*/
public void onScrollStateChanged(RecyclerView recyclerView, int newState){}
/**
* Callback method to be invoked when the RecyclerView has been scrolled. This will be
* called after the scroll has completed.
* <p>
* This callback will also be called if visible item range changes after a layout
* calculation. In that case, dx and dy will be 0.
*
* @param recyclerView The RecyclerView which scrolled.
* @param dx The amount of horizontal scroll.
* @param dy The amount of vertical scroll.
*/
public void onScrolled(RecyclerView recyclerView, int dx, int dy){}
}
다 원 코드 주석 을 통 해 알 수 있 습 니 다.onScroll State Changed 는 recyclerview 의 스크롤 상태 가 바 뀌 었 을 때 호출 합 니 다.
onScrolled 는 레이아웃 이 보이 고 recycleview 가 굴 러 갈 때 호출 됩 니 다.
그렇다면 생각 은:
(1)onScrollStateChanged 방법 에서 현재 스크롤 상태 가 스크롤 을 멈 춘 상태 라 고 판단 합 니 다.
(2)그리고 api 의 방법 에 따라 마지막 으로 볼 수 있 는 위 치 를 얻 습 니 다.
(3)현재 보 이 는 recycleview 에서 item 의 개수 가 0 보다 크다 고 판단 합 니 다.
(4)마지막 에 볼 수 있 는 위치 가 item 총수 보다 1 이상 이 라 고 판단 한다.
(5)그리고 아 이 템 의 총 수 는 보 이 는 아 이 템 보다 크 면 한 화면 을 초과 할 때 실 행 될 수 있 습 니 다.
양보 면 의 요 구 를 만족 시 킬 때 우 리 는 인터페이스 리 셋 을 통 해 우리 의 시간 소모 논 리 를 실행 하고 불 러 오 는 dialog 를 표시 할 수 있다.
RecyclerView 는 layoutManager 를 통 해 목록,표,폭포 류 로 유연 하 게 전환 할 수 있 기 때문이다.특히 폭포 가 흐 를 때 마지막 으로 보 이 는 위치 가 다 르 기 때문에 우 리 는 서로 다른 layoutManager 상태 에 따라 해당 하 는 마지막 보 이 는 위 치 를 가 져 야 한다.
코드:
@Override
public void onScrollStateChanged(int state) {
if (state == RecyclerView.SCROLL_STATE_IDLE && mLoadingListener != null) {
LayoutManager layoutManager = getLayoutManager();
int lastVisibleItemPosition;
if (layoutManager instanceof GridLayoutManager) {
lastVisibleItemPosition = ((GridLayoutManager) layoutManager).findLastVisibleItemPosition();
} else if (layoutManager instanceof StaggeredGridLayoutManager) {
int[] into = new int[((StaggeredGridLayoutManager) layoutManager).getSpanCount()];
((StaggeredGridLayoutManager) layoutManager).findLastVisibleItemPositions(into);
lastVisibleItemPosition = findMax(into);
} else {
lastVisibleItemPosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition();
}
if (layoutManager.getChildCount() > 0
&& lastVisibleItemPosition >= layoutManager.getItemCount() - 1 && layoutManager.getItemCount() > layoutManager.getChildCount()) {
View footView = mFootViews.get(0);
footView.setVisibility(View.VISIBLE);
mLoadingListener.onLoadMore();
}
}
}
우 리 는 api 를 통 해 폭포 류 의 모든 열 을 얻 을 수 있 고 아래 의 방법 을 통 해 맨 아래 의 열 을 찾 을 수 있다.불 러 온 dialog 를 이 열 아래 에 표시 합 니 다.
private int findMax(int[] lastPositions) {
int max = lastPositions[0];
for (int value : lastPositions) {
if (value > max) {
max = value;
}
}
return max;
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
안 드 로 이 드 에서 Recycle View 는 끝까지 내 려 가 는 감청 예 시 를 추가 합 니 다.우리 의 일상 개발 에 서 는 드 롭 다운 리 셋 을 자주 사용 하 는데,인터넷 에서 가장 좋 은 오픈 소스 드 롭 다운 리 셋 구성 요 소 는 당연히 이 구성 요 소 는 모든 컨트롤 에 드 롭 다운 리 셋 기능 을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.