public class MainActivity extends Activity {
private ListView listView=null;
//listview的数据填充器
private ArrayAdapter<String> adapter;
//listview中数据的集合
private List<String> data;
//下一页初始化为0
int nextpage = 0;
//每一页记载多少数据
private int number=10;
//最多有几页
private int maxpage=5;
//用来判断是否加载完成
private boolean loadfinish=true;
private View v;
private Handler handler;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//listview中脚跟的视图
v=this.getLayoutInflater().inflate(R.layout.progress, null);
listView=(ListView) super.findViewById(R.id.listview);
//得到数据
data=DataServer.getData(0,10);
//实习化ArrayAdapter对象
adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, data);
//添加listview的脚跟视图,这个方法必须在listview.setAdapter()方法之前,否则无法显示视图
listView.addFooterView(v);
//添加数据
listView.setAdapter(adapter);
//当下一页的数据加载完成之后移除改视图
listView.removeFooterView(v);
//当用户滑动listview到最后一项是,动态的加载第二页的数据
listView.setOnScrollListener(new OnScrollListener()
{
public void onScrollStateChanged(AbsListView view, int scrollState)
{
// TODO Auto-generated method stub
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, final int totalItemCount)
{
//得到listview最后一项的id
int lastItemId=listView.getLastVisiblePosition();
//判断用户是否滑动到最后一项,因为索引值从零开始所以要加上1
if((lastItemId+1)==totalItemCount)
{
/**
* 计算当前页,因为每一页只加载十条数据,所以总共加载的数据除以每一页的数据的个数
* 如果余数为零则当前页为currentPage=totalItemCount/number;
* 如果不能整除则当前页为(int)(totalItemCount/number)+1;
* 下一页则是当前页加1
*/
int currentPage=totalItemCount%number;
if(currentPage==0)
{
currentPage=totalItemCount/number;
}
else
{
currentPage=(int)(totalItemCount/number)+1;
}
System.out.println("当前页为:"+currentPage);
nextpage=currentPage+1;
//当总共的数据大于0是才加载数据
if(totalItemCount>0)
{
//判断当前页是否超过最大页,以及上一页的数据是否加载完成
if(nextpage<=maxpage && loadfinish )
{
//添加页脚视图
listView.addFooterView(v);
loadfinish=false;
new Thread(new Runnable()
{
public void run()
{
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//获取当前加载页的数据
data=DataServer.getData(totalItemCount, 10);
//通知listview改变UI中的数据
handler.sendEmptyMessage(0);
}
}).start();
//还可以通过这样的方式实现
//AsyncTaskLoadData asynctask=new AsyncTaskLoadData(totalItemCount);
///asynctask.execute();
}
}
}
//判断加载的数据的页数有没有超过最大页,并且是否已经记载完成
}
});
handler=new Handler()
{
@SuppressLint("HandlerLeak")
public void handleMessage(Message msg)
{
if(msg.what==0)
{
//通知listview中的数据已经改动
adapter.notifyDataSetChanged();
loadfinish=true;
}
super.handleMessage(msg);
//判断listview中的页脚视图是否存在,如果存在在删除页脚视图
if(listView.getFooterViewsCount()!=0)
{
listView.removeFooterView(v);
}
}
};
}
//异步加载数据
@SuppressWarnings("unused")
private final class AsyncTaskLoadData extends AsyncTask<Object, Object, Object>
{
private int count;
private List<String> list;
public AsyncTaskLoadData(int totalItemCount) {
this.count=totalItemCount;
list=new ArrayList<String>();
}
protected Object doInBackground(Object... params) {
list=DataServer.getData(count, 10);
return null;
}
@Override
protected void onPostExecute(Object result)
{
try {
data=list;
adapter.notifyDataSetChanged();
Thread.sleep(2000);
loadfinish=true;
if(listView.getFooterViewsCount()!=0)
{
listView.removeFooterView(v);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
super.onPostExecute(result);
}
}
}
分享到:
相关推荐
综上所述,实现Android中的ListView分页加载数据涉及多个环节,从监听滚动事件、加载更多数据,到优化用户体验和内存管理。在实际开发中,结合业务需求选择合适的实现方式和第三方库,可以极大地提升应用的性能和...
通过以上步骤和优化,你可以实现在Android应用中有效地使用ListView分页加载数据,提升用户体验。在实践中,还需要根据具体需求和项目规模来调整和优化。在OndeStudy1这个文件中,可能包含了实现分页加载的示例代码...
而实现分页加载更多,我们需要在ListView滚动到底部时触发加载新数据的事件。 以下是实现分页加载更多的步骤: 1. **创建Adapter**:自定义一个继承自BaseAdapter的Adapter,它将负责将数据转化为ListView中的Item...
在Android开发中,ListView是一种常见的UI组件,用于展示大量数据列表。当数据量过大时,一次性加载所有数据可能会导致性能问题,比如内存消耗过大、应用响应慢等。为了解决这些问题,通常会采用“动态加载数据分页...
综上所述,“Android ListView的分页加载”涉及到UI组件优化、数据源管理、性能提升和用户体验等多个方面。通过理解其原理并灵活运用各种工具和技巧,我们可以构建出高效且用户友好的列表应用。
在ListView分页加载中,我们通常会结合PagerAdapter或FragmentPagerAdapter来创建一个滑动页面的效果,这样用户可以逐页浏览内容,而不是一次性看到所有数据。这两种适配器用于在ViewPager中管理页面,与ListView...
本压缩包"安卓listview相关相关-Listview分页加载数据.rar"主要关注的是ListView的分页加载数据这一核心特性。 一、ListView基础 1. ListView的基本结构:ListView由多个View(如TextView、ImageView等)组成的...
本资源"Android高级应用源码-Listview分页加载数据.zip"提供了一种高效处理大量数据的方法——分页加载,这对于优化用户体验和节省系统资源至关重要。下面将详细探讨ListView分页加载的核心原理、实现方法以及其在...
在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表,比如联系人、消息等。然而,如果一次性加载所有数据,不仅会消耗大量内存,也可能导致应用运行缓慢。因此,通常采用分页加载(Pagination)的...
由于一次性加载所有数据可能会消耗大量内存并导致应用性能下降,因此通常会采用分页加载(Pagination)的方式来优化用户体验。本篇文章将深入探讨如何在Android中实现ListView的分页功能。 一、ListView分页原理 ...
在Android开发中,ListView是广泛...以上就是关于“android listview分页加载的demo【源代码】”的详细知识点介绍,通过学习和实践,开发者可以掌握在Android应用中高效展示大量数据的技巧,提升应用的性能和用户体验。
在这个"android listview分页查询显示"的Demo中,我们将深入探讨如何实现这个功能,以及如何结合SQLite数据库进行数据管理。 首先,ListView的工作原理是通过Adapter来连接数据源和视图。Adapter负责将数据转化为...
分页加载是指在用户滚动列表到底部时,应用程序动态地从服务器获取更多数据并将其添加到已有的ListView中,而不是一次性加载所有数据。这种技术可以减少内存消耗,避免一次性加载大量数据导致的卡顿现象,尤其对于...
Android ListView分页加载功能 在实际开发中经常用到,是每个开发者必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了测试。 服务端使用MyEclipse,Android端使用Eclipse。
"安卓Android源码——Listview分页加载数据.zip"这个压缩包可能包含了一个示例项目,演示了如何在ListView中实现分页加载功能。下面我们将深入探讨这个主题。 1. **ListView基础**:ListView是Android SDK中的一个...
Android 自定义ListView实现底部分页刷新与顶部下拉刷新 一.ListView 底部分页加载 整个底部分页加载,主要分一下几步: 1.加载底部自定义View; 2.响应OnScrollListener监听事件,onScroll方法记录最后可见的View ...
通过以上步骤,我们就实现了一个基础的ListView分页加载数据的功能。在实际开发中,可以根据需求进行扩展,例如添加菊花动画以指示加载状态,或者对数据进行缓存以减少网络请求次数。总之,合理利用ListView的分页...