Android ListView 는 더 많은 업로드 와 드 롭 다운 새로 고침 기능 을 구현 합 니 다.
3820 단어 AndroidListView드 롭 다운 리 셋업 로드
1.ListView 최적화 방식
인터페이스 캐 시:ViewHolder+convertView
페이지 로 딩:위로 당기 기 새로 고침
그림 캐 시
빠 른 슬라이딩 ListView 새로 고침 금지
2.효과
3.위로 끌 어 올 리 기 더 많은 원리 와 실현
우리 손가락 이 listview 의 마지막 위치 로 미 끄 러 졌 을 때,우 리 는 데 이 터 를 불 러 오 는 방법 을 촉발 합 니 다.이것 이 촉발 되 기 전에 우 리 는 다음 과 같은 일 을 해 야 한다.
어떻게 마지막 까지 미 끄 러 지 는 것 을 판단 합 니까?
어떻게 중복 로드 데 이 터 를 피 합 니까?
불 러 온 후 어떻게 인터페이스 를 갱신 합 니까?
1)인터페이스 가 AbsListView 를 실현 합 니 다.OnScrollListener 인 터 페 이 스 는 firstVisibleItem+visibleItemCount>=totalItemCount 가 맨 아래로 미 끄 러 졌 음 을 판단 할 수 있 습 니 다.
2)데 이 터 를 반복 적 으로 불 러 오지 않 기 위해 서 입 니 다.예 를 들 어 제 손가락 이 맨 아래로 미 끄 러 지면 손가락 이 바로 떠 나 고 바로 미 끄 러 지면 데이터 가 두 번 끌 어 올 립 니 다.저 희 는 mHandler.hasMessages(LOAD)를 이용 하여 메시지 대기 열 에 이 메시지 가 존재 하 는 지 판단 합 니 다.
3),우 리 는 handler 에 새 데 이 터 를 불 러 오고 mStringArray Adapter.notifyDataSetChanged()를 이용 합 니 다.알림 창 새로 고침.
int result1;
int result2;
//
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case SCROLL_STATE_IDLE:
//
break;
case SCROLL_STATE_FLING:
//
if (result1 >= result2) {
// ,
if (!mHandler.hasMessages(LOAD))
mHandler.sendEmptyMessageDelayed(LOAD, 5000);
}
break;
case SCROLL_STATE_TOUCH_SCROLL:
//
break;
}
}
//
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// Log.e(TAG, "firstVisibleItem:" + firstVisibleItem + "---visibleItemCount:" + visibleItemCount + "--totalItemCount:" + totalItemCount);
//
if (firstVisibleItem + visibleItemCount >= totalItemCount) {
// ,
}
}
4.드 롭 다운 플러스 리 셋 원리 와 실현드 롭 다운 리 셋 핵심 원리 와 상 라 로드 핵심 원리 가 일치 하 며 디 테 일 만 다 를 뿐이다.우 리 는 다음 과 같은 문 제 를 처리 해 야 한다.사용자 의 현재 위치 가 데이터 제1조 에 있다 는 것 을 어떻게 판단 합 니까?어떻게 사용자 가 첫 번 째 조 와 동시에 일정한 거 리 를 끌 어 내 리 는 것 을 판단 합 니까?어떻게 업데이트 인터페이스 를 갱신 합 니까?
1)、주의사항:
초기 화 는 기본 위 에 있 는 새로 고침 아이콘 을 숨 기 고 ProgressBar 에 Android:visibility="gone"을 설정 해 야 합 니 다.이렇게 설정 하면 안 되 고 mListView 를 설정 해 야 합 니 다.setSelection(1);현재 첫 번 째 열 을 첫 번 째 데이터 로 합 니 다.마찬가지 로 불 러 오기 가 끝 난 후에 도 mListView.set Selection(1)을 설정 해 야 합 니 다.첫 줄 보이 기.
2)、실현
*첫 번 째 판단 방식 mListView.getFirstVisiblePosition()==0
*mListView 는 mListView 를 실현 합 니 다.setOnTouchListener 방법 은 사용자 가 손가락 으로 누 른 위치 와 들 어 올 린 위치 에 따라 이 두 가지 거리 와 우리 가 정 한 거리(예 를 들 어 100)의 크기 를 계산 합 니 다.크 면 새로 고침 작업 을 합 니 다.
*새로 고침 후 알림 인터페이스 mStringArrayAdapter.notifyDataSetChanged();
mListView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startY=event.getY();
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
endY=event.getY();
if(endY-startY> DISTANT&&(mListView.getFirstVisiblePosition()==1||mListView.getFirstVisiblePosition()==0)){
if(!mHandler.hasMessages(FRESH)){
mProgressBar_top.setVisibility(View.VISIBLE);
//notif
mHandler.sendEmptyMessageDelayed(FRESH,5000);
}
}
break;
}
// true,
return false;
}
});
이상 은 본 고의 모든 내용 입 니 다.여러분 이 안 드 로 이 드 소프트웨어 프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.