日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

精确监听AbsListView滚动至底部

發布時間:2025/6/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 精确监听AbsListView滚动至底部 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 用戶使用android客戶端時,當ListView滾動至底部,可以由一個按鈕來提示用戶是否讀下一頁,那么如果使用GridView呢?現在很多WEB 2.0上的體驗就是當底部時自動讀取下一頁數據,GridView(ListView也可)可以采用這種方法。網上已經有很多文章介紹了如何判斷ListView是否滾動至底部,原理是 AbsListView.getLastVisiblePosition() = (AbsListView.getCount() - 1) 即到底,如果往上拖一點,用戶看起來已經離開底部,但實際上 AbsListView.getLastVisiblePosition()?== (AbsListView.getCount() - 1) 依然成立,會導致誤判斷。本文在它們基礎上加以改進,做到更精確地監聽是否滾動至底部。先來看看本文程序運行的效果:

?

本文在?Android入門第八篇之GridView(九宮圖)基礎上加入滾到事件判斷,文件名為AutoLoadListener.java,原理是在AbsListView.getLastVisiblePosition() = =(AbsListView.getCount() - 1) 時,保存最后一個Item的絕對坐標,如果兩次獲取的絕對Y值都一樣,即到底然后執行回調函數......源碼如下:

[java]?view plaincopyprint?
  • <span?style="font-family:Comic?Sans?MS;">package?com.testScroll;??
  • ??
  • import?android.util.Log;??
  • import?android.view.View;??
  • import?android.widget.AbsListView;??
  • import?android.widget.Toast;??
  • import?android.widget.AbsListView.OnScrollListener;??
  • /**?
  • ?*?滾動至列表底部,讀取下一頁數據?
  • ?*/??
  • public?class?AutoLoadListener?implements?OnScrollListener{??
  • ??
  • ????public?interface?AutoLoadCallBack?{??
  • ????????void?execute(String?url);??
  • ????}??
  • ??
  • ????private?int?getLastVisiblePosition?=?0,lastVisiblePositionY=0;??
  • ????private?AutoLoadCallBack??mCallback;??
  • ????public?AutoLoadListener(AutoLoadCallBack?callback)??
  • ????{??
  • ????????this.mCallback?=?callback;??
  • ????}??
  • ??????
  • ????public?void?onScrollStateChanged(AbsListView?view,?int?scrollState)?{??
  • ??
  • ????????if?(scrollState?==?OnScrollListener.SCROLL_STATE_IDLE)?{??
  • ????????????//滾動到底部??
  • ????????????if?(view.getLastVisiblePosition()?==?(view.getCount()?-?1))?{??
  • ????????????????View?v=(View)?view.getChildAt(view.getChildCount()-1);??
  • ????????????????int[]?location?=?new??int[2]?;??
  • ????????????????v.getLocationOnScreen(location);//獲取在整個屏幕內的絕對坐標??
  • ????????????????int?y=location?[1];??
  • ??
  • ????????????????Log.e("x"+location[0],"y"+location[1]);??
  • ????????????????if?(view.getLastVisiblePosition()!=getLastVisiblePosition??
  • ????????????????????????&&?lastVisiblePositionY!=y)//第一次拖至底部??
  • ????????????????{??
  • ????????????????????Toast.makeText(view.getContext(),?"再次拖至底部,即可翻頁",500).show();??
  • ????????????????????getLastVisiblePosition=view.getLastVisiblePosition();??
  • ????????????????????lastVisiblePositionY=y;??
  • ????????????????????return;??
  • ????????????????}??
  • ????????????????else?if?(view.getLastVisiblePosition()==getLastVisiblePosition??
  • ????????????????????????&&?lastVisiblePositionY==y)//第二次拖至底部??
  • ????????????????{??
  • ????????????????????mCallback.execute(">>>>>拖至底部");??
  • ????????????????}??
  • ????????????}??
  • ??????????????
  • ????????????//未滾動到底部,第二次拖至底部都初始化??
  • ????????????getLastVisiblePosition=0;?????
  • ????????????lastVisiblePositionY=0;??
  • ????????}??
  • ????}??
  • ??
  • ????public?void?onScroll(AbsListView?arg0,?int?arg1,?int?arg2,?int?arg3)?{??
  • ??????????
  • ????}??
  • }??
  • </span>??
  • 主程序為testScroll.java,源碼如下:

    [java]?view plaincopyprint?
  • <span?style="font-family:Comic?Sans?MS;">package?com.testScroll;??
  • ??
  • import?java.util.ArrayList;??
  • import?java.util.HashMap;??
  • ??
  • import?com.testScroll.AutoLoadListener.AutoLoadCallBack;??
  • ??
  • ??
  • import?android.app.Activity;??
  • import?android.os.Bundle;??
  • import?android.view.View;??
  • import?android.widget.AdapterView;??
  • import?android.widget.AdapterView.OnItemClickListener;??
  • import?android.widget.GridView;??
  • import?android.widget.SimpleAdapter;??
  • import?android.widget.Toast;??
  • ??
  • public?class?testScroll?extends?Activity?{??
  • ????/**?Called?when?the?activity?is?first?created.?*/??
  • ????@Override??
  • ????public?void?onCreate(Bundle?savedInstanceState)?{??
  • ????????super.onCreate(savedInstanceState);??
  • ????????setContentView(R.layout.main);??
  • ????????setTitle("精確監聽AbsListView滾動至底部----hellogv");??
  • ????????GridView?gridview?=?(GridView)?findViewById(R.id.gridview);??
  • ??
  • ????????//?生成動態數組,并且轉入數據??
  • ????????ArrayList<HashMap<String,?Object>>?lstImageItem?=?new?ArrayList<HashMap<String,?Object>>();??
  • ????????for?(int?i?=?0;?i?<?30;?i++)?{??
  • ????????????HashMap<String,?Object>?map?=?new?HashMap<String,?Object>();??
  • ????????????map.put("ItemImage",?R.drawable.icon);//?添加圖像資源的ID??
  • ????????????map.put("ItemText",?"NO."?+?String.valueOf(i));//?按序號做ItemText??
  • ????????????lstImageItem.add(map);??
  • ????????}??
  • ????????//?生成適配器的ImageItem?<====>?動態數組的元素,兩者一一對應??
  • ????????SimpleAdapter?saImageItems?=?new?SimpleAdapter(this,?//?沒什么解釋??
  • ????????????????lstImageItem,//?數據來源??
  • ????????????????R.layout.night_item,//?night_item的XML實現??
  • ??
  • ????????????????//?動態數組與ImageItem對應的子項??
  • ????????????????new?String[]?{?"ItemImage",?"ItemText"?},??
  • ??
  • ????????????????//?ImageItem的XML文件里面的一個ImageView,兩個TextView?ID??
  • ????????????????new?int[]?{?R.id.ItemImage,?R.id.ItemText?});??
  • ???????????
  • ????????//添加自動讀頁的事件??
  • ????????AutoLoadListener?autoLoadListener?=new?AutoLoadListener(callBack);??
  • ????????gridview.setOnScrollListener(autoLoadListener);??
  • ????????//?添加并且顯示??
  • ????????gridview.setAdapter(saImageItems);??
  • ????????//?添加消息處理??
  • ????????gridview.setOnItemClickListener(new?ItemClickListener());??
  • ????}??
  • ??
  • ????AutoLoadCallBack?callBack=new?AutoLoadCallBack(){??
  • ??
  • ????????public?void?execute(String?url)?{??
  • ????????????Toast.makeText(testScroll.this,?url,?500).show();??
  • ????????}??
  • ??????????
  • ????};??
  • ????//?當AdapterView被單擊(觸摸屏或者鍵盤),則返回的Item單擊事件??
  • ????class?ItemClickListener?implements?OnItemClickListener?{??
  • ????????public?void?onItemClick(AdapterView<?>?arg0,//?The?AdapterView?where?the??
  • ????????????????????????????????????????????????????//?click?happened??
  • ????????????????View?arg1,//?The?view?within?the?AdapterView?that?was?clicked??
  • ????????????????int?arg2,//?The?position?of?the?view?in?the?adapter??
  • ????????????????long?arg3//?The?row?id?of?the?item?that?was?clicked??
  • ????????)?{??
  • ????????????//?在本例中arg2=arg3??
  • ????????????HashMap<String,?Object>?item?=?(HashMap<String,?Object>)?arg0??
  • ????????????????????.getItemAtPosition(arg2);??
  • ????????????//?顯示所選Item的ItemText??
  • ????????????setTitle((String)?item.get("ItemText"));??
  • ????????}??
  • ??
  • ????}??
  • }??
  • </span> ?
  • 總結

    以上是生活随笔為你收集整理的精确监听AbsListView滚动至底部的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 制服丝袜亚洲色图 | 91老师国产黑色丝袜在线 | 国产乱码精品一区二区 | 黑人巨大精品欧美 | xxxx黄色 | 国产麻豆免费观看 | 91动态图| 欧美亚洲专区 | 午夜免费视频 | 久久精彩视频 | 无码视频在线观看 | 日本肉体xxxx裸体xxx免费 | 奶水喷溅 在线播放 | 国产999在线观看 | 午夜免费一级片 | 麻豆视频91 | 亚洲欧美综合网 | 久久影视 | 99在线观看免费 | 亚洲私人网站 | 黄色成年网站 | 天天操人人爽 | 亚洲免费在线视频观看 | 五月激情四射网 | 亚洲女人在线 | 久久午夜av | 午夜av网址 | 冈本视频在线观看 | 爱操在线 | 日韩一区二区三区免费视频 | 国产成人在线播放视频 | 天天插天天狠天天透 | 精品人妻一区二区三 | 欧美激情爱爱 | 亚洲在线一区二区三区 | 伦理片一区二区三区 | www.色天使 | 国产欧美综合一区 | 欧美成人午夜精品免费 | 日韩一级黄色大片 | 日韩精品一区二区在线看 | 亚洲AV无码成人精品区在线观 | 91久久婷婷 | 精品一区二区三区精华液 | 激情网五月天 | 精品一区二区视频在线观看 | 日韩中文网 | 国产欧美日韩精品在线观看 | 欧美夜夜 | 性感少妇av | av免费大片 | 国产精选第一页 | 99视频在线免费观看 | 欧美女优视频 | 激情视频在线播放 | 国产亚洲欧美精品久久久久久 | 国产特级黄色片 | 4438全国最大成人网 | 日本人和亚洲人zjzjhd | 97色涩| www夜夜操 | 草久久久久久 | 天天操天天透 | 日韩中文无 | 亚洲黄色精品 | 欧美在线一区二区三区四区 | 黄色理论视频 | 日韩亚洲欧美中文字幕 | 人人妻人人爽人人澡人人精品 | 免费成人深夜在线观看 | 淫辱的世界(调教sm)by | 特黄大片又粗又大又暴 | 精品成人网 | 国产毛片视频 | 最新av在线网址 | 超碰伊人久久 | 波多在线视频 | 亚洲免费精品视频在线观看 | 国产视频123区 | 欧美女人一区二区 | 亚洲永久免费 | 91精品福利在线 | 五月天丁香久久 | av在线不卡免费观看 | 精品欧美一区二区三区免费观看 | 国产精品福利一区 | 美女一二三区 | 国产少女免费观看高清 | 免费处女在线破视频 | 国产99久久久国产精品免费看 | 白丝少妇| 国产a级片免费看 | 欧美日韩国产区 | 特一级黄色片 | 中文字幕一区二区三区人妻电影 | 亚洲人人在线 | 成人片片 | 91麻豆国产福利精品 | 在线观看免费黄色小视频 |