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----> ...
随机推荐
- 递归树处理,配合vue的vueTreeselect组件使用
在项目中经常会使用到tree,并且需要对递归树进行操作. 在vue项目中,使用vue-treeselect插件(https://vue-treeselect.js.org/) 使用中遇到的问题: 1. ...
- ActiveMQ_Windows和Linux版本的安装部署
1, 保证电脑上安装了jdk6以上版本的java,并配置了好环境变量 : 2, 官方下载地址:http://activemq.apache.org/download-archives.html ,这里 ...
- codevs——T1814 最长链
http://codevs.cn/problem/1814/ 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 De ...
- iOS企业证书网页分发全过程具体解释(图文并茂史无前例的具体哦)
iOS企业证书网页分发全过程具体解释 苹果的企业级证书公布的应用.是不用设备授权就可以直接安装,而且不限设备上限. 为了方便分发,苹果有协议实现通过网页链接直接下载安装企业级的应用. 首先须要说明它的 ...
- Hive分区表与分桶
分区表 在Hive Select查询中.通常会扫描整个表内容,会消耗非常多时间做不是必需的工作. 分区表指的是在创建表时,指定partition的分区空间. 分区语法 create table tab ...
- 使用Xcode-debug模式和release模式
在开发过程中,我们常常须要用到NSLog输出一些信息,甚至有的开发过程.必须在控制台查看输出,有经验的程序猿通过控制台输出就能知道整个数据交互的一个流程. 可是一个公布的程序,里面带有太多的NSLog ...
- bzoj1816: [Cqoi2010]扑克牌(二分答案判断)
1816: [Cqoi2010]扑克牌 题目:传送门 题解: 被一道毒瘤题搞残了...弃了坑来刷刷水题 一开始还想复杂了...结果发现二分水过: 二分答案...然后check一下,joker肯定尽量用 ...
- zzulioj--1705--小明在工作(模拟水题)
1705: 小明在工作 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 179 Solved: 59 SubmitStatusWeb Board De ...
- 最长回文子串 C++实现 java实现 leetcode系列(五)
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...
- xBIM 基础04 日志操作
系列目录 [已更新最新开发文章,点击查看详细] xBIM使用Log4Net来记录异常不适合的处理错误和警告.它在xBIM几何引擎中被大量使用来记录所有几何错误.如果您的文件看起来不太正确,则应 ...