Android数据分批载入-滑动究竟部自己主动载入列表
Android数据分批载入-滑动究竟部自己主动载入列表
2014年5月9日
摘自:《Android高级开发实战—ui、ndk与安全》
本博文介绍怎样进行数据分批载入,在应用开发其中会常常使用到ListView。点击很多其它载入数据是我们常常简单,为了提供用户体验。当用户将列表滚动究竟部自己主动载入数据。这种形式用得比較多。
以下给大家提供的样例是,每次模拟20条数据,滑动究竟部时再请求20条数据直到请求到限定页数为止
详细代码实现:
/08_Datapageload/src/com/wwj/datapageload/MainActivity.java
- package com.wwj.datapageload;
- import java.util.ArrayList;
- import java.util.List;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.util.Log;
- import android.view.View;
- import android.widget.AbsListView;
- import android.widget.AbsListView.OnScrollListener;
- import android.widget.ArrayAdapter;
- import android.widget.ListView;
- public class MainActivity extends Activity {
- private ListView listView;
- private List<String> data = new ArrayList<String>();
- ArrayAdapter<String> adapter;
- View footer;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- footer = getLayoutInflater().inflate(R.layout.footer, null);
- listView = (ListView) findViewById(R.id.listView);
- listView.setOnScrollListener(new ScrollListener());
- // 模拟数据
- data.addAll(DataService.getData(0, 20));
- adapter = new ArrayAdapter<String>(this, R.layout.listview_item,
- R.id.textView, data);
- listView.addFooterView(footer);// 加入页脚(放在ListView最后)
- listView.setAdapter(adapter);
- listView.removeFooterView(footer);
- }
- private int number = 20; // 每次获取多少条数据
- private int maxpage = 5; // 总共同拥有多少页
- private boolean loadfinish = true; // 指示数据是否载入完毕
- private final class ScrollListener implements OnScrollListener {
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem,
- int visibleItemCount, int totalItemCount) {
- Log.i("MainActivity", "onScroll(firstVisibleItem="
- + firstVisibleItem + ",visibleItemCount="
- + visibleItemCount + ",totalItemCount=" + totalItemCount
- + ")");
- final int loadtotal = totalItemCount;
- int lastItemid = listView.getLastVisiblePosition(); // 获取当前屏幕最后Item的ID
- if ((lastItemid + 1) == totalItemCount) { // 达到数据的最后一条记录
- if (totalItemCount > 0) {
- // 当前页
- int currentpage = totalItemCount % number == 0 ? totalItemCount
- / number
- : totalItemCount / number + 1;
- int nextpage = currentpage + 1; // 下一页
- if (nextpage <= maxpage && loadfinish) {
- loadfinish = false;
- listView.addFooterView(footer);
- // 开一个线程载入数据
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- List<String> result = DataService.getData(
- loadtotal, number);
- // 发送消息
- handler.sendMessage(handler.obtainMessage(100,
- data));
- }
- }).start();
- }
- }
- }
- }
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- Log.i("MainActivity", "onScrollStateChanged(scrollState="
- + scrollState + ")");
- }
- }
- private Handler handler = new Handler() {
- public void handleMessage(android.os.Message msg) {
- data.addAll((List<String>) msg.obj);
- // 告诉ListView数据已经发生改变。要求ListView更新界面显示
- adapter.notifyDataSetChanged();
- if (listView.getFooterViewsCount() > 0) { // 假设有底部视图
- listView.removeFooterView(footer);
- }
- loadfinish = true; // 载入完毕
- };
- };
- }
/08_Datapageload/src/com/wwj/datapageload/DataService.java
- package com.wwj.datapageload;
- import java.util.ArrayList;
- import java.util.List;
- public class DataService {
- public static List<String> getData(int offset, int maxResult) { // 分页limit
- // 0,20
- List<String> data = new ArrayList<String>();
- for (int i = 0; i < 20; i++) {
- data.add("ListView数据的分批载入" + i);
- }
- return data;
- }
- }
效果图例如以下:
Android数据分批载入-滑动究竟部自己主动载入列表的更多相关文章
- [JS前端开发] js/jquery控制页面动态载入数据 滑动滚动栏自己主动载入事件
本人小菜鸟一仅仅.为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识,小菜鸟创建了一个群.希望光临本博客的人能够进来交流.寻求 ...
- 让Android Support V4中的SwipeRefreshLayout支持上拉载入很多其它
前言 原来的Android SDK中并没有下拉刷新组件,可是这个组件确实绝大多数APP必备的一个部件.好在google在v4包中出了一个SwipeRefreshLayout.可是这个组件仅仅支持下拉刷 ...
- Android实现RecyclerView的下拉刷新和上拉载入很多其它
需求 先上效果图, Material Design风格的下拉刷新和上拉载入很多其它. 源代码地址(欢迎star) https://github.com/studychen/SeeNewsV2 假设对于 ...
- Android三种左右滑动效果 手势识别
Android三种左右滑动效果 手势识别(转) 手势识别 1.onCreate中添加GestureDetector mGestureDetector; //监听手势事件 mGestureDetec ...
- TabTopAutoLayout【自定义顶部选项卡区域(带下划线)(动态选项卡数据且可滑动)】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 自定义顶部选项卡布局LinearLayout类,实现带下划线且可滑动效果.[实际情况中建议使用RecyclerView] 备注:如果 ...
- TabTopAutoTextSizeLayout【自定义文字字号区域(动态选项卡数据且可滑动)】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 自定义顶部选项卡布局LinearLayout类,实现可滑动效果.[实际情况中建议使用RecyclerView] 对<TabTo ...
- (七十一)关于UITableView退出崩溃的问题和滚动究竟部的方法
[TableView退出崩溃的问题] 近期在使用TableView时偶然发如今TableView中数据较多时,假设在滚动过程中退出TableView到上一界面.会引起程序的崩溃.经过网上查阅和思考我发 ...
- Android数据存储之SQLCipher数据库加密
前言: 最近研究了Android Sqlite数据库(文章地址:Android数据存储之Sqlite的介绍及使用)以及ContentProvider程序间数据共享(Android探索之ContentP ...
- Android数据存储之GreenDao 3.0 详解
前言: 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite----> ...
随机推荐
- java实现多个数字求和_图形化界面
一,设计思想 1,通过简单的窗口实现多个数字的输入与输出. 2,可通过用户输入数字的数量来实现多个数字的求和. 3,定义整型数组变量number和字符串型数组变量integer,将输入的字符串变量赋给 ...
- webstorm注册码注册
最近jetbrains公司更新软件总是特别的快,很多私人搭建的server服务也失效了,现出一个能够永久破解的方法,非常简单,只需要2步就完成. 第一步 复制下方activation code,直接粘 ...
- ActiveMQ学习总结(4)——业界消息队列简介
最近开发公司的短信平台,要用到消息队列,之前用的是亚马逊的SQS,考虑到后续业务发展,对消息推送的高并发要求,公司决定采用RabbitMQ来替换.借此机会开始熟悉各种MQ产品,下面先给大家简介下业界常 ...
- cocos2d-x-3.3rc2-003 cocos中的引用计数和自己主动释放池
点击打开链接
- mysql int(m)与int(m)的差别
预计大多数開始接触mysql的朋友们都会有这个问题:int(M) 里面的数值究竟是什么意思? 依据相关资料总结了下: int(M) zerofill,加上zerofill后M才表现出有点点效果,比方 ...
- C#上传文件
QQ:1187362408 欢迎技术交流和学习 关于C#上传文件(产品开发): TODO: 1.文件大小不足500M(web.config配置直接处理) 2,文件大小超过500M(ASP.NET分段读 ...
- Android上方便地开发的C程序
假设你基于没有一个专门的开发板练手.那你的Android手机也能够开发大多数C应用程序.安装好后编译C的编译器. 本文仅仅写一个Hello World的执行过程. 长处是:不须要eclipse,不须要 ...
- iOS:简单使用UIAlertVIew和UIActionSheet
做iOS开发的同学想必都用过UIAlertVIew或者UIActionSheet.UIAlertVIew 可以弹出一个出现在屏幕中间的提示视图,给用户展示信息,并让用户自己选择操作,UIActionS ...
- 山东理工oj--1912--IP地址(水题)
IP地址 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 2011年2月3日,国际互联网名称与数字地址分配机构(ICANN) ...
- 读取XML字符串到临时表
DECLARE @hdoc int DECLARE @doc xml SET @doc = '<CityValueSet> <CityItem> <CityId>2 ...