Android ListView 는 더 많은 업로드 와 드 롭 다운 새로 고침 기능 을 구현 합 니 다.

본 논문 의 사례 는 안 드 로 이 드 ListView 드 롭 다운 리 셋 기능 의 실현 방법 과 기능 을 소개 하 였 으 며,여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
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;
 }
 });
이상 은 본 고의 모든 내용 입 니 다.여러분 이 안 드 로 이 드 소프트웨어 프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기