listView滑动刷新代码(分页功能)
来源:互联网 发布:淘宝企业店铺转个人 编辑:程序博客网 时间:2024/04/30 19:56
这三个代码都是从网上下载来的,但是导入到eclipse里面以后,中文注释出现乱码,所以我文章里面的注释有很多可能是自己添加的,如有不准确的地方,敬请谅解和留言告知!
这个例子是listview一开始显示10个,下拉listview,就会更新添加列表,知道第50个。
首先,布局文件是非常简单,可以直接看代码,首先,先看下自定义的一个简单的Adapter:
- class listViewAdapter extends BaseAdapter {
- int count = 10;
- public int getCount() {
- return count;
- }
- public Object getItem(int pos) {
- return pos;
- }
- public long getItemId(int pos) {
- return pos;
- }
- public View getView(int pos, View v, ViewGroup p) {
- TextView view;
- if (v==null) {
- view = new TextView(MainActivity.this);
- }
- else {
- view=(TextView)v;
- }
- view.setText("ListItem " + pos);
- view.setTextSize(20f);
- view.setGravity(Gravity.CENTER);
- view.setHeight(60);
- return view;
- }
- }
在这里初始化的count,就是listview的item个数是十个,当滑动的时候,再动态增加。
在看一下,在oncreate方法里面通过代码把控件添加进去。
- //线性布局
- LinearLayout layout = new LinearLayout(this);
- //设置布局 水平方向
- layout.setOrientation(LinearLayout.HORIZONTAL);
- //进度条
- progressBar = new ProgressBar(this);
- //进度条显示位置
- progressBar.setPadding(0, 0, 15, 0);
- //把进度条加入到layout中
- layout.addView(progressBar, mLayoutParams);
- //文本内容
- TextView textView = new TextView(this);
- textView.setText("加载中。。。");
- textView.setGravity(Gravity.CENTER_VERTICAL);
- //把文本加入到layout中
- layout.addView(textView, FFlayoutParams);
- //设置layout的重力方向,即对齐方式是
- layout.setGravity(Gravity.CENTER);
- ///设置ListView的页脚layout
- loadingLayout = new LinearLayout(this);
- loadingLayout.addView(layout, mLayoutParams);
- loadingLayout.setGravity(Gravity.CENTER);
- //得到一个ListView用来显示条目
- listView = getListView();
- //添加到页脚显示
- listView.addFooterView(loadingLayout);
- //给ListView添加适配器
- setListAdapter(adapter);
- //给ListView注册滚动监听
- listView.setOnScrollListener(this);
这里面用到了两个layout属性,它们的声明是:
- /**
- * 设置布局显示属性
- */
- private LayoutParams mLayoutParams =new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
- /**
- * 设置布局显示目标最大化属性
- */
- private LayoutParams FFlayoutParams =new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT);
最重要的代码如下:重写了onScroll和onScrollStateChanged两个方法:
- @Override
- public void onScroll(AbsListView v, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
- Log.v("@@@@@@", "Scroll>>>first: " + firstVisibleItem + ", visible: " + visibleItemCount + ", total: " + totalItemCount);
- lastItem = firstVisibleItem + visibleItemCount - 1;
- Log.i("@@@@@@" , "Scroll>>>lastItem:" + lastItem);
- //显示50条ListItem,即0-49,因为onScroll是在“滑动”执行过之后才触发,所以用adapter.count<=41作条件
- if (adapter.count<=41) {
- if (firstVisibleItem+visibleItemCount==totalItemCount) {
- adapter.count += 10;
- adapter.notifyDataSetChanged();
- listView.setSelection(lastItem);
- Log.v("@@@@@@","onScroll "+adapter.count);
- int currentPage=adapter.count/10;
- Toast.makeText(getApplicationContext(), "第"+currentPage+"页", Toast.LENGTH_LONG).show();
- }
- }else {
- listView.removeFooterView(loadingLayout);
- }
- }
- @Override
- public void onScrollStateChanged(AbsListView v, int state) {
- if (lastItem == adapter.count && state == OnScrollListener.SCROLL_STATE_IDLE) {
- Log.v("@@@@@@", "ScrollStateChanged>>>state:"+state+"lastItem:" + lastItem);
- if (adapter.count<=41) {
- adapter.count += 10;
- adapter.notifyDataSetChanged();
- Log.v("@@@@@@","onScrollStateChanged "+adapter.count);
- }
- }
- }
先说下onScroll方法的几个参数的意义:
官方解释如下:
- view
- The view whose scroll state is being reported
- firstVisibleItem
- the index of the first visible cell (ignore if visibleItemCount == 0)
- visibleItemCount
- the number of visible cells
- totalItemCount
- the number of items in the list adaptor
- firstVisibleItem:当前能看见的第一个列表项ID(从0开始)
- visibleItemCount:当前能看见的列表项总数(小半个也算,部分显示的都算)
- totalItemCount:列表项共数
- lastItem = firstVisibleItem + visibleItemCount - 1;
- if (firstVisibleItem+visibleItemCount==totalItemCount) {
- adapter.count += 10;
- adapter.notifyDataSetChanged();
- listView.setSelection(lastItem);
- Log.v("@@@@@@","onScroll "+adapter.count);
- int currentPage=adapter.count/10;
- Toast.makeText(getApplicationContext(), "第"+currentPage+"页", Toast.LENGTH_LONG).show();
- }
这样的话,整个就比较容易理解了。
在listview里面还有几个方法:
listView.getFirstVisiblePosition()是获得现在屏幕第一个ListItem(第一个ListItem部分显示也算)
listView.getLastVisiblePosition()现时屏幕最后一个ListItem(最后ListItem要完全显示出来才算)
代码下载地址如下:,http://download.csdn.net/detail/aomandeshangxiao/4094237,http://download.csdn.net/detail/aomandeshangxiao/4094244,
http://download.csdn.net/detail/aomandeshangxiao/4094250,一共三个demo,感兴趣的可以先看下。这些demo均是从网上下载而来,供学习只用。
后面还会有另外两个例子的解析,分别是:listView下拉刷新(sina微博Android客户端效果),listView下拉刷新2
- listView滑动刷新代码(分页功能)
- listView滑动刷新代码(分页功能)
- Android listView滑动刷新代码(分页功能)
- listView滑动刷新代码(分页功能)
- listView滑动刷新代码(分页功能)
- listView滑动刷新代码(分页功能)
- listview下拉刷新 上拉(滑动分页)加载更多
- listview下拉刷新 上拉(滑动分页)加载更多
- listview下拉刷新 上拉(滑动分页)加载更多
- listview下拉刷新 上拉(滑动分页)加载更多
- Android listview滑动删除下拉刷新上拉分页
- listview下拉刷新 上拉(滑动分页)加载更多
- listview下拉刷新 上拉(滑动分页)加载更多
- 下拉刷新 上拉分页 滑动删除listview
- listview下拉刷新 上拉(滑动分页)加载更多
- Android ListView 滑动分页
- listView自动滑动功能
- 自定义listView添加滑动删除功能(代码)
- listView下拉刷新(仿sina微博Android客户端效果)
- ashx灵活处理文件下载问题
- UVa 10047 - The Monocycle, 优先队列+BFS
- 天平称球问题(一)
- listView下拉刷新加载数据
- listView滑动刷新代码(分页功能)
- 关于一个 date-time 时间服务的daemon process 的代码实现
- 通过进程ID获取进程主窗口句柄
- 关于session超时、网址里有未知字符的问题
- extjs的treepanel不自动加载的实现
- XMPP协议分析-原理篇
- 程序设计名词解释
- DLL远程注入代码
- asp.net发送邮件代码(Gmail、163能发)