欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android ListView實(shí)現(xiàn)上拉加載更多和下拉刷新功能

 更新時(shí)間:2016年05月18日 14:37:42   投稿:lijiao  
這篇文章主要為大家詳細(xì)介紹了Android ListView實(shí)現(xiàn)上拉加載更多和下拉刷新功能,介紹了ListView刷新原理及實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家介紹了Android ListView下拉刷新功能的實(shí)現(xiàn)方法和功能,供大家參考,具體內(nèi)容如下

1、ListView優(yōu)化方式

界面緩存ViewHolder+convertView
分頁(yè)加載:上拉刷新
圖片緩存
快速滑動(dòng)ListView禁止刷新

2、效果

3、上拉加載更多原理及實(shí)現(xiàn)

當(dāng)我們手指滑動(dòng)到listview最后位置的時(shí)候,我們觸發(fā)加載數(shù)據(jù)的方法。這觸發(fā)之前我們需要做一些工作,包括:

如何判斷滑動(dòng)到最后?

如何避免重復(fù)加載數(shù)據(jù)?

加載之后如何刷新界面?

1)、界面實(shí)現(xiàn)AbsListView.OnScrollListener接口,當(dāng)firstVisibleItem + visibleItemCount >= totalItemCount即可判斷滑動(dòng)到了最下面;
2)、為了不重復(fù)加載數(shù)據(jù),例如當(dāng)我手指滑動(dòng)到最下面,手指立馬離開,然后再馬上滑動(dòng),就會(huì)導(dǎo)致數(shù)據(jù)拉取兩次,我們利用mHandler.hasMessages(LOAD)判斷消息隊(duì)列中是否已經(jīng)存在這個(gè)消息;
3)、我們?cè)趆andler中加載新數(shù)據(jù),并且利用 mStringArrayAdapter.notifyDataSetChanged();通知界面刷新。

 int result1;
 int result2;
 //監(jiān)聽狀態(tài)改變
 @Override
 public void onScrollStateChanged(AbsListView view, int scrollState) {
 switch (scrollState) {
 case SCROLL_STATE_IDLE:
 //滑動(dòng)結(jié)束
 break;
 case SCROLL_STATE_FLING:
 //手指離開屏幕
 if (result1 >= result2) {
  //只發(fā)送一次,防止多次加載數(shù)據(jù)
  if (!mHandler.hasMessages(LOAD))
  mHandler.sendEmptyMessageDelayed(LOAD, 5000);
 }
 break;
 case SCROLL_STATE_TOUCH_SCROLL:
 //滑動(dòng)中
 break;
 }
 }

 //滑動(dòng)結(jié)束之后執(zhí)行
 @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) {
 //這里不處理,在上面狀態(tài)改變結(jié)束之后再處理
 }
 }

4、下拉加刷新原理及實(shí)現(xiàn)

下拉刷新核心原理和上拉加載核心原理一致,只是有細(xì)節(jié)不同。我們需要處理以下問題:如何判斷用戶當(dāng)前位置在數(shù)據(jù)第一條?如何判斷用戶在第一條的同時(shí)下拉一定距離?如何刷新更新界面(上面已經(jīng)解決)?

1)、注意事項(xiàng):

初始化應(yīng)該設(shè)置默認(rèn)上面的刷新圖標(biāo)隱藏,在ProgressBar中設(shè)置Android:visibility="gone";這樣設(shè)置還不行,還需要設(shè)置 mListView.setSelection(1);讓當(dāng)前第一列是第一條數(shù)據(jù)。同樣的,在加載完成之后也要設(shè)置mListView.setSelection(1);,顯示第一行。

2)、實(shí)現(xiàn)

*判斷第一條的方式mListView.getFirstVisiblePosition()==0
*mListView實(shí)現(xiàn) mListView.setOnTouchListener方法,來根據(jù)用戶手指按下的位置以及抬起的位置,計(jì)算這兩者的距離與我們規(guī)定的距離(如100)的大小,如大于就進(jìn)行刷新操作。
*刷新之后通知界面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,不然直接消費(fèi)掉了
 return false;
 }
 });

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)Android軟件編程有所幫助。

相關(guān)文章

  • Android開發(fā)之Location用法實(shí)例分析

    Android開發(fā)之Location用法實(shí)例分析

    這篇文章主要介紹了Android開發(fā)中Location用法,結(jié)合實(shí)例形式分析了Android使用location控件獲取經(jīng)緯度信息的相關(guān)操作技巧,需要的朋友可以參考下
    2016-10-10
  • Android如何調(diào)用系統(tǒng)相機(jī)拍照

    Android如何調(diào)用系統(tǒng)相機(jī)拍照

    這篇文章主要為大家詳細(xì)介紹了Android如何調(diào)用系統(tǒng)相機(jī)拍照的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • android開發(fā)之方形圓角listview代碼分享

    android開發(fā)之方形圓角listview代碼分享

    我寫這篇文章受到了kiritor的專欄發(fā)表的博文Android UI控件之ListView實(shí)現(xiàn)圓角效果的啟發(fā)。
    2013-06-06
  • 使用RoundedBitmapDrawable生成圓角圖片的方法

    使用RoundedBitmapDrawable生成圓角圖片的方法

    由于RoundedBitmapDrawable類沒有直接提供生成圓形圖片的方法,所以生成圓形圖片首先需要對(duì)原始圖片進(jìn)行裁剪,將圖片裁剪成正方形,最后再生成圓形圖片,具體實(shí)現(xiàn)方法,可以參考下本文
    2016-09-09
  • Android 插件化處理方案詳解

    Android 插件化處理方案詳解

    這篇文章主要介紹了Android 插件化處理方案的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下
    2021-04-04
  • Android實(shí)現(xiàn)瘋狂連連看游戲之實(shí)現(xiàn)游戲邏輯(五)

    Android實(shí)現(xiàn)瘋狂連連看游戲之實(shí)現(xiàn)游戲邏輯(五)

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)瘋狂連連看游戲之實(shí)現(xiàn)游戲邏輯,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • android中UI主線程與子線程深入分析

    android中UI主線程與子線程深入分析

    這篇文章主要介紹了android中UI主線程與子線程,以實(shí)例形式較為深入的分析了UI主線程與子線程的運(yùn)行原理與操作技巧,有助于深入了解Android程序設(shè)計(jì),需要的朋友可以參考下
    2015-02-02
  • android 設(shè)置鬧鐘及通知示例

    android 設(shè)置鬧鐘及通知示例

    本篇文章主要介紹了android 設(shè)置鬧鐘及通知示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Flutter實(shí)現(xiàn)PopupMenu彈出式菜單按鈕詳解

    Flutter實(shí)現(xiàn)PopupMenu彈出式菜單按鈕詳解

    這篇文章主要介紹了Flutter實(shí)現(xiàn)PopupMenu彈出式菜單按鈕,PopupMenuButton是一個(gè)用于創(chuàng)建彈出菜單的小部件,當(dāng)用戶點(diǎn)擊觸發(fā)按鈕時(shí),PopupMenuButton會(huì)在屏幕上方或下方彈出一個(gè)菜單,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • 詳解React Native監(jiān)聽Android回退按鍵與程序化退出應(yīng)用

    詳解React Native監(jiān)聽Android回退按鍵與程序化退出應(yīng)用

    這篇文章主要介紹了詳解React Native監(jiān)聽Android回退按鍵與程序化退出應(yīng)用的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09

最新評(píng)論