Listview分页加载数据的实现

public class MainActivity extends Activity {
protected static final int SUCCESS_GET_DATA = 0;
private ListView listview;
private DataService service;
private List<String> data;// 加载的总数据
private ArrayAdapter<String> adapter; private boolean finish = true;// 是否加载完成 private View footer; private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case SUCCESS_GET_DATA:
@SuppressWarnings("unchecked")
ArrayList<String> result = ((ArrayList<String>) msg.obj);
data.addAll(result);
// 让listview自动刷新
adapter.notifyDataSetChanged();
finish = true;
// 将页脚删除掉
if (listview.getFooterViewsCount() > 0) {
listview.removeFooterView(footer);
}
break; default:
break;
}
};
}; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); listview = (ListView) findViewById(R.id.listview);
service = new DataService();
data = new ArrayList<String>();
List<String> result = service.getData(0, 20);
data.addAll(result);
adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.tv_info,
data);
footer = View.inflate(this, R.layout.footer, null);
// 在增加listview的页脚之前,需要提前设置一次
listview.addFooterView(footer);
listview.setAdapter(adapter);
// 然后再次将页脚删除掉
listview.removeFooterView(footer);
// 滚动监听事件
listview.setOnScrollListener(new MyOnScrollListener());
} private final class MyOnScrollListener implements OnScrollListener {
// 加载的总页数
private int countPage = 5;
// 每页加载20条数据
private int pageSize = 20; // 滚动状态发生改变时
public void onScrollStateChanged(AbsListView view, int scrollState) {
Log.i("i", " scrollState " + scrollState);
} // 当list开始滚动时
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// 最下面的条目数
final int totalCount = firstVisibleItem + visibleItemCount;
int currentPage = totalCount / pageSize;// 当前页
int nextPage = currentPage + 1;// 下一页
// 当翻到最后一条数据时
if (totalCount == totalItemCount && nextPage <= countPage && finish) {
// 已经移动到了listview的最后
finish = false;
// 添加页脚
listview.addFooterView(footer);
new Thread() {
public void run() {
SystemClock.sleep(3000);
List<String> result = service.getData(totalCount + 1,
pageSize);
Message msg = new Message();
msg.what = SUCCESS_GET_DATA;
msg.obj = result;
mHandler.sendMessage(msg);
};
}.start();
}
}
}
}

数据服务类,这里进行数据的模拟获取

public class DataService {

	//加载数据
public List<String> getData(int startPosition ,int offset){
List<String> data = new ArrayList<String>();
for(int i = 0;i< 20;i++){
data.add("分页加载的数据 " + i);
}
return data;
}
}


【Android进阶】Listview分页加载数据的实现的更多相关文章

  1. Android中ListView分页加载数据

    public class MainActivity extends Activity { private ListView listView=null; //listview的数据填充器 privat ...

  2. java攻城狮之路(Android篇)--widget_webview_metadata_popupwindow_tabhost_分页加载数据_菜单

    一.widget:桌面小控件1 写一个类extends AppWidgetProvider 2 在清单文件件中注册: <receiver android:name=".ExampleA ...

  3. listView 分页加载数据

    Android应用 开发中,采用ListView组件来展示数据是很常用的功能,当一个应用要展现很多的数据时,一般情况下都不会把所有的数据一次就展示出来,而是通过分页 的形式来展示数据,个人觉得这样会有 ...

  4. Android中ListView动态加载数据

    1. 引言: 为了提高ListView的效率和应用程序的性能,在Android应用程序中不应该一次性加载ListView所要显示的全部信息,而是采取分批加载策略,随着用户的滑动,动态的从后台加载所需的 ...

  5. Android 自定义ListView动态加载数据

    我们都知道网络取数据是耗时操作,如果我们一次性请求所有数据,假如数据量不多那还可以接受,但是如果数据量特别多,那么带来的后果就是用户的愤怒(用户是很没有耐心的),所以这时候我们就需要动态的加载数据,分 ...

  6. android ListView 分页加载数据

    1.mainActivity <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  7. Android中ListView异步加载数据

    1.主Activity public class MainActivity extends Activity { private ListView listView; private ArrayLis ...

  8. Android之ListView&Json加载网络数据

    使用到的主要内容: 1.Json 解析网络数据 2.异步任务加载图片和数据 3.ListView 的内存空间优化(ConvertView)和运行时间优化(ViewHolder) 4.ListView ...

  9. Android的ListView异步加载图片时,错位、重复、闪烁问题的分析及解决方法

    Android ListView异步加载图片错位.重复.闪烁分析以及解决方案,具体问题分析以及解决方案请看下文. 我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图 ...

随机推荐

  1. 敏捷开发-Scrum 真实

    近期研究前 Scrum 数据编译的文件,在接下来的团队和项目开发.项目根据该引入 Scrum 一些练习,提高团队成员和项目之间的交付质量的合作. 参考资料: <轻松Scrum之旅-敏捷开发故事& ...

  2. fastdfs storage server的设计与实现

     fastdfs是一个针对互联网应用设计的分布式文件系统.具有架构简单.结构清晰.代码量小等特点. 详细的介绍及架构请參考分布式文件系统FastDFS架构剖析(http://www.program ...

  3. SE 2014年4月12日

    BGP基础实验 拓扑 步骤: 1. 完成基本的配置 2. 按照需求自治系统AS 100 全网运行OSPF 单区域 3. 完成BGP基本配置 [RT2]bgp 100 [RT2-bgp]peer 67. ...

  4. HDU3977(斐波那契数列模n的循环节长度)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3977 题意:求斐波那契数列模p的循环节长度,注意p最大是2*10^9,但是它的素因子小于10^6. 分析过 ...

  5. osx下快捷键相应符号

    2张图展示mac下相应的按键符号: 很多其它文章请前往小胖轩.

  6. IntelliJ IDEA Groovy(转)

    更新环境变量: source /etc/profile 验证是否成功: # groovy -version Groovy Version: 2.3.6 JVM: 1.7.0_67 Vendor: Or ...

  7. 共同发展一个以上的开发者账户多台电脑 证书 p12 型材 进出口

    1:导出相应的开发人员证书的配置文件. 2:依据相应的app id 创建配置文件. 3:打开钥匙串,把你的公布证书导出p12文件. 4:用开发人员账号导出developerprofile文件. 5:把 ...

  8. varchar 分享影响记忆 试

    准备数据 sysbench --test=oltp --oltp-nontrx-mode=update_key --mysql-table-engine=innodb --oltp-table-siz ...

  9. JAVA 保留两位小数的四种方法

    import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; publiccl ...

  10. Wake-On-LAN待机或休眠模式中唤醒

    Wake-On-LAN简称WOL,是一种电源管理功能:如果存在网络活动,则允许设备将操作系统从待机或休眠模式中唤醒.许多主板厂商支持IBM提出的网络唤醒标准.该标准允许网络管理员远程打开PC机电源,以 ...