Android学习笔记_37_ListView批量加载数据和页脚设置
1、在activity_main.xml布局文件中加入ListView控件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
>
</ListView> </RelativeLayout>
2、为ListView添加项listview_item.xml:
<?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="vertical" > <TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/> </LinearLayout>
3、添加页脚界面footer.xml:
<?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:layout_width="50dp"
android:layout_height="match_parent"
style="?android:attr/progressBarStyle"
android:id="@+id/downloadbar"
/> <TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="数据正在加载中" /> </LinearLayout>
4、后台代码实现:
package com.example.listviewbatch; import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
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 static final String TAG="ListMainActivity";
private ListView listView;
private List<String> data = new ArrayList<String>();
private int pageCount=30;
private int maxPage;
private boolean loadfinish=true;//加载完毕
private ArrayAdapter<String> adapter;
private View footer;//页脚
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
data = DataService.getData(1, pageCount);
maxPage=DataService.getTotal()/pageCount==0?DataService.getTotal()/pageCount:DataService.getTotal()/pageCount+1;
listView = (ListView) this.findViewById(R.id.listView);
adapter = new ArrayAdapter<String>(this,R.layout.listview_item
,R.id.textView,data);
footer =getLayoutInflater().inflate(R.layout.footer, null);
listView.addFooterView(footer);
listView.setAdapter(adapter);
listView.removeFooterView(footer);
//监听ListView滚动事件
listView.setOnScrollListener(new MyScrollListener());
}
private final class MyScrollListener implements OnScrollListener{ @Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
Log.i(TAG, "onScrollStateChanged( scrollState: "+scrollState+")");
} @Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
Log.i(TAG, "onScroll( firstVisibleItem: "+firstVisibleItem+")"+
"visibleItemCount: "+visibleItemCount+")"+
"totalItemCount: "+totalItemCount+")");
//获取屏幕最后行索引
int lastItemId = listView.getLastVisiblePosition();
final int total= totalItemCount;
if((lastItemId+1)==totalItemCount){//换页
if(totalItemCount>0){
int currentPage = totalItemCount/pageCount==0?totalItemCount/pageCount:totalItemCount/pageCount+1;
if((currentPage+1)<maxPage && loadfinish){
loadfinish=false;
listView.addFooterView(footer);
//开启子线程获取数据,由于子线程不能更新主线程的UI,所以必须通过Handle进行处理,需要子线程将数据包装
//成Message对象,再通过Handle接收到数据,调用notifyDataSetChanged通知适配器更
//新ListView
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
List<String> resultList =DataService.getData(total, pageCount);
Log.i("DataServiceGetData","count: "+resultList.size());
handler.sendMessage(handler.obtainMessage(0, resultList));
}
}).start();
}
}
}
}
}
private Handler handler = new Handler(){ @Override
public void handleMessage(Message msg) {
data.addAll((List<String>) msg.obj);
//通知ListView数据发生改变,要求ListView更新界面
adapter.notifyDataSetChanged();
if(listView.getFooterViewsCount()>0){
listView.removeFooterView(footer);
}
loadfinish=true;
} };
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }
public class DataService {
public static List<String> getData(int items,int count){
int j=0;
List<String> dataList = new ArrayList<String>();
for (int i = items; i <= 200;i++) {
j=j+1;
if(j<count){
dataList.add("ListView批量加载数据"+i);
}
}
return dataList;
}
public static int getTotal(){
return 200;
}
}
Android学习笔记_37_ListView批量加载数据和页脚设置的更多相关文章
- thinkphp学习笔记9—自动加载
原文:thinkphp学习笔记9-自动加载 1.命名空间自动加载 在3.2版本中不需要手动加载类库文件,可以很方便的完成自动加载. 系统可以根据类的命名空间自动定位到类库文件,例如定义了一个类Org\ ...
- Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果)
Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果) 首句依然是那句老话,你懂得! finddreams :(http://blog.csdn.net/finddr ...
- android 批量加载数据
public class MainActivity extends Activity { private ListView listView; private List<String> d ...
- 【Android进阶】Listview分页加载数据的实现
Listview分页加载数据的实现 public class MainActivity extends Activity { protected static final int SUCCESS_GE ...
- [Android Pro] 使用CursorLoader异步加载数据 from 3.0
Android 3.0引入了CursorLoader实现异步加载数据,为了避免同步查询数据库时阻塞UI线程的问题.在API 11之前可以通过下载支持库,来使之前的系统支持此功能,下载页面为 http: ...
- webpack学习笔记--按需加载
为什么需要按需加载 随着互联网的发展,一个网页需要承载的功能越来越多. 对于采用单页应用作为前端架构的网站来说,会面临着一个网页需要加载的代码量很大的问题,因为许多功能都集中的做到了一个 HTML 里 ...
- 【EF学习笔记08】----------加载关联表的数据 显式加载
显式加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 加载从表集合类型 //显示加载 Console.WriteLine("=========查询集合===========&quo ...
- 【EF学习笔记07】----------加载关联表的数据 贪婪加载
讲解之前,先来看一下我们的数据库结构:班级表 学生表 贪婪加载 //贪婪加载 using (var db = new Entities()) { var classes = db.Classes.Wh ...
- 【EF学习笔记06】----------加载关联表的数据 延迟加载
讲解之前,先来看一下我们的数据库结构:班级表 学生表 延迟加载 //延迟加载 using (var db = new Entities()) { //查询班级 var classes = (from ...
随机推荐
- Hashtable元素的遍历
遍历用到DictionaryEntry(字典键/值对) 实例 创建一个Hashtable对象,向其中添加4个元素,然后遍历 static void Main(string[] args) { Hash ...
- lua_nginx_module用例
content_by_lua server { listen ; server_name lua.luckybing.top; location / { default_type 'text/plai ...
- 清理widows的网络连接
在听兄弟连李明老师的课程时,Samba配置时,window连接有时要清理,可以用以下命令 1.打开win的命令行. 2.输入net use,就会打印出当前缓存的连接上列表. 3.根据列表,一个个删除连 ...
- Junit入门教程
做开发的时候,完成一个接口.方法.函数或者功能等,需要测试,是否有bug,有逻辑错误.这里有两种方案测试 1. 在main中写测试方法 2. 使用开源框架,这里使用的junit main写测试方法优点 ...
- PAT 1053 Path of Equal Weight
#include <cstdio> #include <cstdlib> #include <vector> #include <algorithm> ...
- fireworks图片边缘化 fireworks羽化图片边缘的教程
fireworks羽化图片边缘的教程如下: 1. 打开一个图片. 2.点击“工具”面板“位图”部分的“选取框”工具.也可以选择“椭圆选取框”工具. 3.选择部分图象. 4.在属性检查器中,“边缘”项中 ...
- 关于asp.net网站中web.config的配置
1.Session生命周期配置 2.连接默认错误页 实例说明:在一些网站中,当网络地址发生错误时,通常会自动跳转到一个页面,并在该页面显示错误信息,此功能也可以通过配置web.config文件配置实现 ...
- SharePoint 2013 - User Custom Action
1. User Custom Action包含Ribbon和ECB,以及Site Action菜单等,参考此处: 2. 系统默认ECB的Class为: ms-core-menu-box --> ...
- TortoiseGit客户端安装及使用(上传代码到git@osc
用TortoiseGit客户端之前要下载安装git http://git-scm.com/download/win 下载完安装完就可以了,之后好像就用不上了,全交给TortoiseGit客户端了 第一 ...
- 【Linux】小应用 大智慧
小应用 大智慧--重视 以工程师的标准要求自己