这三个代码都是从网上下载来的,但是导入到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);
这里面用到了两个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);
}
}
}
firstVisibleItem:当前能看见的第一个列表项ID(从0开始)
visibleItemCount:当前能看见的列表项总数(小半个也算,部分显示的都算)
totalItemCount:列表项共数
[java] view plaincopy
lastItem = firstVisibleItem + visibleItemCount - 1;
获取最下面那个item的id(position)值.
[java] view plaincopy
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();
}
如果listitem个数不足50,继续添加,并把listview的焦点放到最下面的item上。
这样的话,整个就比较容易理解了。
在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
http://blog.csdn.net/lilu_leo/article/details/7298840
分享到:
相关推荐
android Listview下拉刷新 上拉(滑动分页)加载更多 高仿新浪微博下拉刷新,同时实现了滑动加载下一页
listview滑动删除下拉刷新上拉分页,直接可以使用
Android 自定义ListView实现底部分页刷新与顶部下拉刷新 一.ListView 底部分页加载 整个底部分页加载,主要分一下几步: 1.加载底部自定义View; 2.响应OnScrollListener监听事件,onScroll方法记录最后可见的View ...
提供下拉分页刷新列表 case MotionEvent.ACTION_UP: if (!isVerticalScrollBarEnabled()) { setVerticalScrollBarEnabled(true); } if (getFirstVisiblePosition() == 0 && mRefreshState != REFRESHING) { /...
Qt qml listview下拉刷新和上拉分页主要根据contentY来判断。但要加上顶部下拉指示器、滚动条,并封装成可简单调用的组件,着实花了我不少精力:) 先给大家展示下效果图: 【功能】 下拉刷新和上拉分页逻辑 /...
Fragment+ListView下拉加载上拉刷新
主要介绍了Android程序开发之Listview下拉刷新上拉(滑动分页)加载更多的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
android分页调用webservice获取数据
通常你都会手指向上滑动屏幕然后去查看,当界面下滑到一定数量的时候,就会看到一个“查看更多”,然后突然停顿一下,系统会通过网络去给你刷新其他动态信息,这样的功能我们一般叫做数据下拉刷新功能,也就是我们的...
ListView、SwipeRefreshLayout实现下拉刷新,上拉加载、滑动加载(自动加载)和点击加载 http://blog.csdn.net/richiezhu/article/details/50958259
本文实例为大家介绍了Android ListView下拉刷新功能的实现方法和功能,供大家参考,具体内容如下 1、ListView优化方式 界面缓存:ViewHolder+convertView 分页加载:上拉刷新 图片缓存 快速滑动ListView禁止刷新 2...
当要显示的数据过多时,为了更好的提升用户感知,在很多APP中都会使用分页刷新显示,比如浏览新闻,向下滑动到当前ListView的最后一条信息(item)时,会提示刷新加载,然后加载更新后的内容。此过程大致分以下几步...
React本机终极Listview 该库包括两个组件: UltimateListView和UltimateRefreshView UltimateListView :高性能FlatList,提供自定义的“拉动刷新” | 自动分页和无限滚动| gridview布局| 可滑动行。 我为您完成了最...
总共36个与listView有关功能的源码,比如仿QQ滑动删除+上下拉刷新,listView停止滚动开启下载图片,三级菜单列表,获取网络图片优化,适配优化,listview分页加载,下拉图片放大,松开回弹等有关各种listview特效、...
android 仿google play效果,ListView/GridView下拉刷新,上拉加载更多,自动加载异步请求数据以及分页数据 package net.xinhua.activity; import net.xinhuamm.widget.TouchViewPager; import android.os.Bundle; ...
下拉刷新,滑动到底部自动加载的listview 最后把时候还有下一页传入进去
关于listview的操作五花八门,有下拉刷新,分级显示,分页列表,逐页加载等,以后会陆续和大家分享这些技术,今天讲下下拉加载这个功能的实现。最初的下拉加载应该是ios上的效果,现在很多应用如新浪微博等都加入了...
|--监听之ListView滑动监听 |--监听之单击监听的两种定义 |--监听之双击监听 |--监听之电话状态监听 |--监听之触摸监听 |--短信之根据id删除及查询短信 |--短信发送小demo |--短信的截取 |--系统之SD卡清理 |--系统...