android 批量加载数据
public class MainActivity extends Activity {
private ListView listView;
private List<String> data = new ArrayList<String>();
ArrayAdapter<String> adapter;
View footer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
///通过xml布局文件生成View对象
footer = getLayoutInflater().inflate(R.layout.footer, null);
listView = (ListView) this.findViewById(R.id.listView);
//为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最后,并且要放在setAdapter()方法之前,因为内部会有所包装)
listView.setAdapter(adapter);
listView.removeFooterView(footer);//刚开始时删除页脚
}
private int number = 20;//每次获取多少条数据
private int maxpage = 5;//总共有多少页
private boolean loadfinish = true;
private final class ScrollListener implements OnScrollListener{
public void onScrollStateChanged(AbsListView view, int scrollState) {
Log.i("MainActivity", "onScrollStateChanged(scrollState="+ scrollState+ ")");
}
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() {
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
List<String> result = DataService.getData(loadtotal, number);
handler.sendMessage(handler.obtainMessage(100, result));
}
}).start();
}
}
}
}
}
Handler handler = new Handler(){
public void handleMessage(Message msg) {
data.addAll((List<String>) msg.obj);
adapter.notifyDataSetChanged();//告诉ListView数据已经发生改变,要求ListView更新界面显示
if(listView.getFooterViewsCount() > 0) listView.removeFooterView(footer);
loadfinish = true;
}
};
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<!--系统中的圆形滚动条--> <ProgressBar android:id="@+id/c81_forthBar"
android:layout_width="50dp"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyle" />
<TextView android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:textSize="20sp"
android:text="数据正在加载..."
/>
</LinearLayout>
<!--页脚xml-->
android 批量加载数据的更多相关文章
- Android学习笔记_37_ListView批量加载数据和页脚设置
1.在activity_main.xml布局文件中加入ListView控件: <RelativeLayout xmlns:android="http://schemas.android ...
- Android 异步加载数据 AsyncTask异步更新界面
官方文档: AsyncTask enables proper and easy use of the UI thread. This class allows to perform backg ...
- 【HBase】通过Bulkload批量加载数据到Hbase表中
目录 需求 步骤 一.开发MapReduce 二.打成Jar包放到linux执行 三.有两种办法将HFile文件加载到HBase表中 开发代码 Hadoop命令运行 需求 将hdfs上面的这个路径 / ...
- android LoaderManger加载数据Tip
要查看LoaderManager的具体介绍请看博客: LoaderManager介绍 使用时发现不管怎么调用getLoaderManager().restartLoader(LOADER_TYPE_Q ...
- java攻城狮之路(Android篇)--widget_webview_metadata_popupwindow_tabhost_分页加载数据_菜单
一.widget:桌面小控件1 写一个类extends AppWidgetProvider 2 在清单文件件中注册: <receiver android:name=".ExampleA ...
- android左右滑动加载分页以及动态加载数据
android UI 往右滑动,滑动到最后一页就自动加载数据并显示 如图: package cn.anycall.ju; import java.util.ArrayList; import java ...
- Android中ListView分页加载数据
public class MainActivity extends Activity { private ListView listView=null; //listview的数据填充器 privat ...
- android 中使用缓存加载数据
最近app快完工了,但是很多列表加载,新闻咨询等数据一直从网络请求,速度很慢,影响用户体验,所以寻思用缓存来加载一些更新要求不太高的数据 废话不多说,上代码 欢迎转载,但请保留文章原始出处:) 博客 ...
- 【Android进阶】Listview分页加载数据的实现
Listview分页加载数据的实现 public class MainActivity extends Activity { protected static final int SUCCESS_GE ...
随机推荐
- FZU 1876 JinYueTuan(排列组合)
Description Let’s have a look at the picture below Now, do you know what it’s? Yeah , O(∩_∩)O~ , It ...
- C#设计模式:模板方法模式(Template Method)
一,我们为什么需要模板设计模式? 在程序设计中,可能每个对象都有共同的地方,而此时如果每个对象定义一次,如下例子,每个对象都写Stay()方法,这样在每个类中都有很多相同的代码,此时,我们需要用到模板 ...
- PHP字符串操作函数练习20191025
<?php$arr=["tom","peter","mary"];$str=implode("+",$arr);/ ...
- elasticsearch 关联单词查询以及Shingles
Shingle Token Filter A token filter of type shingle that constructs shingles (token n-grams) from a ...
- [HTML知识体系]meta标签的常见用法
1.meta是什么 元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. 标签位于文档的头部,不包含任何内容. 标签的属性定义了与文档相关联的名称 ...
- Solr是什么?
么是Solr?Solr是什么? 答:Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口. Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服 ...
- 浏览器CSS兼容
一.<important 在IE6及FF中的使用>.box1 {width:150px !important;} .box1 {width:250px;} !important是说这个设置 ...
- Application对象详解
定义// import javax.servlet.ServletContext;// ServletContext类:用于表示应用程序的上下文// 取得application对象ServletCon ...
- 【leetcode】519. Random Flip Matrix
题目如下: You are given the number of rows n_rows and number of columns n_cols of a 2D binary matrix whe ...
- Druid动态数据源配置
上文已经讲了单个数据源的Druid的配置(http://www.cnblogs.com/nbfujx/p/7686634.html) Druid动态数据源配置 主要是继承AbstractRouting ...