【技术】ListView组件的分页技术 焦点资讯
一、ListView分页: (一)、目的: Android 应用开发中,采用ListView组件来展示数据是很常用的功能,当一个应用要展现很多的数据时,一般情况下都不会把所有的数据一次就展示出来,而是通过 分页的形式来展示数据,这样会有更好的用户体验。因此,很多应用都是采用分批次加载的形式来获取用户所需的数据。例如:微博客户端可能会在用户滑 动至列表底端时自动加载下一页数据,也可能在底部放置一个"查看更多"按钮,用户点击后,加载下一页数据。 (二)、核心技术点: 借助 ListView组件的OnScrollListener监听事件,去判断何时该加载新数据; 往服务器get传递表示页码的参数:page。而该page会每加载一屏数据后自动加一; 利用addAll()方法不断往list集合末端添加新数据,使得适配器的数据源每新加载一屏数据就发生变化; 利用适配器对象的notifyDataSetChanged()方法。该方法的作用是通知适配器自己及与该数据有关的view,数据已经发生变动,要刷新自己、更新数据。 (三)、 1、该监听器中有两个需要实现的方法: onScrollStateChanged(AbsListView view, int scrollState):监听屏幕的滚动状态的变动情况 onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount):监听屏幕滚动的item的数量 2、 scrollState 回调顺序如下: 第1次:scrollState = SCROLL_STATE_TOUCH_SCROLL(1):表示正在滚动。当屏幕滚动且用户使用的触碰或手指还在屏幕上时为1 第2次:scrollState =SCROLL_STATE_FLING(2) :表示手指做了抛的动作(手指离开屏幕前,用力滑了一下,屏幕产生惯性滑动)。 第3次:scrollState =SCROLL_STATE_IDLE(0) :表示屏幕已停止。屏幕停止滚动时为0。 3、 onScroll中参数讲解: firstVisibleItem:当前窗口中能看见的第一个列表项ID(从0开始) visibleItemCount:当前窗口中能看见的列表项的个数(小半个也算) totalItemCount:列表项的总数 4、思路: 当滚到最后一条,加载新数据;适配器的数据源要进行累加:totalList.addAll(list);数据发生变化,适配器通知:adapter.notifyDataSetChanged();【牢记】判断是否滚到最后一行。
android:layout_width="fill_parent"
(相关资料图)
android:layout_height="fill_parent">
<LISTVIEW< p="">
android:id="@+id/listView_main"
android:layout_below="@+id/button_main_init"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LINEARLAYOUT< p="">
android:id="@+id/layout_main_nextpage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#000"
android:visibility="invisible"
android:gravity="center"
android:onClick="clickButton"
android:padding="5dp">
<PROGRESSBAR< p="">
android:id="@+id/progressBar_main"
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TEXTVIEW< p="">
android:id="@+id/text_main_nextpage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textSize="18sp"
android:onClick="clickButton"
android:textColor="#fff"
android:text="点击加载更多数据"/>
2、Activity页面核心代码:
publicclass MainActivity extends Activity {
privateStringTAG= "MainActivity";
privateListView listView_main;
privateLinearLayout layout_main_nextpage;
private MySQLiteDatabaseHelper dbHelper = null;
// 用于分页显示数据的属性
privateintpageSize= 30;// 每页显示的条数
privateintcurPage= 1;
privateintrowCount= 0;
privateintpageCount= 0;// 总页数
privatebooleanisBottom=false;// 判断是否滚动到数据最后一条
private ListtotalList = null;// 加载到适配器中的数据源
private SimpleAdapter adapter = null;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView_main = (ListView) findViewById(R.id.listView_main);
layout_main_nextpage = (LinearLayout) findViewById(R.id.layout_main_nextpage);
// 实例化访问数据库帮助类
dbHelper = new MySQLiteDatabaseHelper();
// 获取数据表一共有多少条,从而计算共有多少页
rowCount=dbHelper.selectCount("select id from android_basic",null);
// 计算总页码数
pageCount = (int) Math.ceil(rowCount / (float) pageSize);
// 如果当前页为第一页,则数据源集合中就是第一页的内容
if (curPage == 1) {
totalList = getCurpageList(1);
}
adapter = new SimpleAdapter(this, totalList,
R.layout.item_listview_main, new String[] { "_id", "title" },
newint[] { R.id.text_item_listview_id,
R.id.text_item_listview_title});
listView_main.setAdapter(adapter);
// 给ListView对象设置滚动监听器,以此来判断是否已经滚动到最后一条,从而决定是否加载新数据
listView_main.setOnScrollListener(new OnScrollListener() {
@Override
publicvoid onScrollStateChanged(AbsListView view, int scrollState) {
if (isBottom) {
// 如果滚到最后一条数据(即:屏幕最底端),则显示:“加载更多新数据”
if(curPage < pageCount) {
layout_main_nextpage.setVisibility(View.VISIBLE);
}
} else {
layout_main_nextpage.setVisibility(View.GONE);
}
}
@Override
publicvoid onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// Log.i(TAG, "==" + firstVisibleItem + ":::" + visibleItemCount
// + ":::" + totalItemCount);
// 判断是否已经滚动到了最后一条,从而决定是否提示加载新数据
isBottom = (firstVisibleItem + visibleItemCount == totalItemCount);
}
});
}
publicvoid clickButton(View view) {
switch (view.getId()) {
caseR.id.layout_main_nextpage:
// Log.i(TAG, "==" + curPage + ":::" + pageCount);
// 如果不是最后一页,则让当前页码累加,让数据源累加新数据,并通知适配器信息发生变化
if(curPage < pageCount) {
curPage++;
totalList.addAll(getCurpageList(curPage));
adapter.notifyDataSetChanged();
}
// 只要点击了提示“加载新数据”的信息,就让其隐藏
layout_main_nextpage.setVisibility(View.GONE);
break;
default:
break;
}
}
// 获取每一页的数据,返回List集合
private ListgetCurpageList(int currentPage) {
int offset = (currentPage - 1) * pageSize;
String sql = "select id _id ,title from android_basic limit ? , ?";
returndbHelper.selectData(sql, new String[] { offset + "",
pageSize + "" });
}
}
标签:
相关推荐:
最新新闻:
- 【科普】什么是通信网络?计算机网络的演进
- 【技术】ListView组件的分页技术 焦点资讯
- 怎么用免费dede采集插件让网站快速收录?有关企业网站优化诊断的三个方面
- 编程思想之多线程与多进程(4)——C++中的线程函数:焦点热文
- 每日速讯:什么是蓝牙Android平台?如何设置蓝牙?
- 吊扇调速器怎么工作?吊扇调速器的原理介绍
- 环球视讯!Bil站自动完成任务工具——BilibiliTask
- 戴尔台式机怎么设置U盘启动?戴尔台式机U盘启动的设置方法
- 忘记TP-LINK路由器登录密码如何解决?TP-LINK路由器登录密码找回方法
- 智能手机与智能机有什么区别?关于智能机的区别介绍
- Windows键是键盘上的哪个键?Win键的作用有多大?
- 实时焦点:压阻式压力传感器/压力变送器的类型有哪些?压力传感器/压力变送器的类型
- media/sf_Share/LED系统命令介绍 Linux系统介绍-焦点短讯
- 【环球播资讯】跟女人聊天的秘诀是什么?会说话的男人到底有哪些特质?
- BT是什么?BT(BitTorren比特流)的原理及使用方法_环球观焦点
- 网速慢到底是电信问题还是电脑问题?网速评判谁更可靠?|焦点热文
- 视网膜显示屏和普通显示屏什么区别?看完你就明白了-全球独家
- 摄像录音笔都有哪些品牌?韩国现代品牌的摄像笔有什么特点?:焦点速讯
- 3米的棉麻面料怎么做?下摆裹身连衣裙的裁剪制作教程 环球精选
- 联想掌上电脑多少钱?联想掌上电脑价格及推荐
- 【干货】Extjs中的ColumnModel属性配置
- 全球信息:redPacketPay.php:扫二维码领红包系统软件开发流程
- kali中如何下载帝国?Web安全攻防之帝国_播资讯
- 公交车到底什么时候能够到站?GPS接受器价格一览_今日聚焦
- 诺基亚7230怎样刷机?诺基亚7230刷机步骤盘点|最新快讯
- 3d基本走势图:彩宝贝 辽宁快乐12选5开奖结果-速看
- 分布式集群化设计——MySQLServer
- 阿里云香港云服务器有哪些优势?阿里云香港服务器购买教程
- 天天即时看!guest账户怎么开启和关闭?guest账户关闭和开启教程
- 液晶屏幕显示器整机无电故障如何处理?液晶屏幕维修之常见问题判断
- 2-5阶魔方玩法:四阶魔方降阶法的还原步骤
- 【可编程】直流电源供应器与负载之间串联一只二极管
- 世界新动态:论坛会员颜小风:ThatPhoto超牛的图像编辑器
- 全球资讯:12306上可以提前多少天买火车票?12306车票的有效期的规定
- 世界即时看!电梯楼层控制系统——IC卡电梯门禁系统介绍
- 诺基亚6700c评测:全金刚材质打造的全金属手机
- 一系列C++类库——PocAny+库
- 环球快报:广州干细胞实验室建设:洁净空调选择有哪些事项?
- 快资讯丨Desktop.ini是什么文件?desktop.ini可以删除吗?
- mac电脑网游加速器哪个好用?网易uu加速器Mac版推荐
- 苹果手机怎么设置屏幕旋转?苹果手机屏幕旋转的设置教程 世界动态
- 【威航软件园】免费的windows文件搜索工具_天天快资讯
- 今日关注:西门子cx6怎么样?西门子cx65详细评测
- 如何制作鼠标跟随效果?鼠标跟随效果制作教程|环球热头条
- 诺基亚手机怎么恢复出厂设置?方法步骤
- 三星s5660如何刷机?三星s5660刷机教程
- 电脑怎么重装系统?电脑重装系统方法大全
- 环球观点:贴片0603蓝光led启动电压2.5V 已经开始导通
- 国企的面试我们应该怎么准备?国企面试的注意事项
- 微软:一旦收购成功 PS版COD甚至比Xbox版还好-环球时讯
- 《漫威暗夜之子》莫比亚斯DLC预告片展示其能力_全球播报
- 《牧场物语 Welcome!美丽人生》遗忘之谷预告片|全球讯息
- 真便宜!小喆优品全铝合金机箱仅189元
- 百亿补贴 Bose蓝牙音箱814元
- 2023爱普生创新大会开启共绘“多彩世界”新篇章
- 【环球时快讯】迷你主机腰斩价!655元买了不亏
- 环球观速讯丨3月21日基金净值:诺安双利债券发起最新净值2.66,涨0.38%
- COSPLAY图赏:俄妹COS《哈利波特》赫敏 泳装版意外惊艳 天天信息
- 今日关注:即时战略《异形:坠入黑暗》公布 6月20日发售
- 汇顶科技创新方案组合助力联想拯救者Y900高能体验_每日消息
- 性能狂飙 高能体验 联想拯救者2023全线生态新品强势发布_热资讯
- C宏源(301246):第三届第二十四次董事会会议决议,审议《关于签订募集资金三方及四监管协议的议案》等议案
- 国外流行起的新种族“星之种” 认为自己是外星人_每日视讯
- 外网热议:为何《光环》改编剧没像《美末》一样成功
- 《星球大战绝地:幸存者》新截图公开
- 环球观热点:《雷霆沙赞2》主演想拍第三部:希望能大战丧尸!
- “最丑超模”获泰国2023选美冠军引热议:评委口太重|环球新视野
- Win11更新修复了复制慢问题 但有可能降低SSD性能:当前消息
- 当前动态:透明外壳:红魔8 Pro银翼版首销 4999元
- 起亚官宣:正式进军中国电动汽车领域-天天快资讯
- 比亚迪:4月上市智能手表-快播
- 《死亡搁浅》玛玛演员新写真 五官精致眼神灵动 天天观热点
- 《暗黑4》公测宣传片:你只管玩游戏 家务活我搞定
- 【焦点热闻】《生化危机4:重制版》角色介绍:商人和光明教主
- 银保监会将开展保险机构销售人员互联网营销宣传合规性自查整改工作:天天精选