`
声动天下
  • 浏览: 7712 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

listView滑动刷新代码(分页功能)

 
阅读更多
这三个代码都是从网上下载来的,但是导入到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 滑动分页

    `dateListView`这个文件名可能是示例代码或者资源文件,可能包含了实现滑动分页功能的部分代码或布局文件。具体实现细节需要查看这个文件来了解。总的来说,滑动分页是Android开发中常见的需求,理解和掌握这一技巧...

    Android ListView下拉刷新和分页

    总结,Android中的ListView下拉刷新和分页加载是提高用户体验的关键特性。通过SwipeRefreshLayout实现下拉刷新,结合OnScrollListener实现分页加载,可以让用户更加流畅地查看和交互数据。在实际开发中,还需要注意...

    android Listview下拉刷新 上拉(滑动分页)加载更多

    总之,下拉刷新和上拉加载更多是提升Android应用用户体验的关键特性,通过合理使用开源库和自定义事件监听,可以轻松地在ListView中实现这些功能。开发者可以根据项目需求选择合适的库,或者自定义实现,以满足各种...

    listview滑动删除下拉刷新上拉分页

    在提供的压缩包文件"listview滑动删除下拉刷新"中,可能包含了实现这些功能的代码示例、库文件或者教程文档。通过学习和理解这些资源,开发者可以快速地在自己的项目中集成这些高级功能,提升应用的质量和用户体验。

    Qt qml ListViewEx 下拉刷新上拉分页

    完美解决ListView下拉刷新和上拉分页逻辑 /下拉刷新 /上拉更多 /滚动栏 /工具栏半拉显隐 带两个示例:新闻、工具栏 示例中的PageView控件在此: https://download.csdn.net/download/surfsky/8516949 当然注释掉...

    android ListView滑动分页加载和点击分页加载,以及复用convertView综合案例

    滑动分页加载,也称为无限滚动或下拉刷新,是一种常见的网络数据加载方式。当用户滚动到ListView的底部时,应用会自动请求更多数据并将其添加到列表中。这种功能的实现主要分为以下步骤: 1. **监听滑动事件**:...

    ListView滑动删除 ,仿腾讯QQ 源码程序

    本项目旨在实现一个仿腾讯QQ的ListView滑动删除功能,通过源码分析和实践,我们可以深入理解这一特性的工作原理和实现方式。 首先,滑动删除功能的核心在于监听ListView的滑动手势。在Android中,我们可以使用...

    android下拉刷新+上拉加载+滑动删除的ListView

    为了提升用户体验,开发者经常需要在ListView中实现下拉刷新、上拉加载和滑动删除等功能。本篇将详细讲解如何在Android中实现这些特性。 下拉刷新(Pull-to-Refresh)功能允许用户通过向下拉动列表来获取最新数据。...

    ListView上拉加载下拉刷新升级版:滑动tabHost结合listView数据刷新

    "ListView上拉加载下拉刷新升级版:滑动tab结合listView数据刷新"这个主题旨在介绍如何将滑动TabHost与ListView集成,以提供更丰富的用户体验。 滑动TabHost(通常与ViewPager结合使用)是Android应用中常见的导航...

    安卓listview相关相关-Listview滑动删除和编辑功能下拉刷新上拉加载更多.rar

    在本资源中,我们关注的是ListView的一些高级特性和功能,包括滑动删除、编辑功能、下拉刷新以及上拉加载更多。 1. **滑动删除与编辑功能**: 在ListView中实现滑动删除,通常需要自定义一个适配器(Adapter)来...

    Android ListView分页功能源码

    在ListView分页加载中,我们通常会结合PagerAdapter或FragmentPagerAdapter来创建一个滑动页面的效果,这样用户可以逐页浏览内容,而不是一次性看到所有数据。这两种适配器用于在ViewPager中管理页面,与ListView...

    listView下拉刷新,到底部自动加载更多

    "ListView下拉刷新,到底部自动加载更多"是移动应用中的常见功能,它提供了用户友好的体验,允许用户通过下拉动作更新列表数据,同时在滚动到底部时自动加载更多内容,这种特性通常被称为"无限滚动"或"自动分页加载...

    Android 自定义ListView实现底部分页刷新与顶部下拉刷新

    Android 自定义ListView实现底部分页刷新与顶部下拉刷新 一.ListView 底部分页加载 整个底部分页加载,主要分一下几步: 1.加载底部自定义View; 2.响应OnScrollListener监听事件,onScroll方法记录最后可见的View ...

    ListView 下拉刷新,上拉加载,滑动删除

    ListView不仅支持基本的列表项显示,还提供了许多扩展功能,如下拉刷新、上拉加载更多和滑动删除等。这些特性使得用户在交互时能有更好的体验。下面将详细解释这些功能的实现原理和步骤。 **下拉刷新(Pull-to-...

    android ListView下拉分页

    提供下拉分页刷新列表 case MotionEvent.ACTION_UP: if (!isVerticalScrollBarEnabled()) { setVerticalScrollBarEnabled(true); } if (getFirstVisiblePosition() == 0 && mRefreshState != REFRESHING) { /...

    完美的ListView下拉刷新上拉加载实例Demo

    然而,为了提供更好的用户体验,开发者经常需要在ListView中实现下拉刷新和上拉加载的功能。"完美的ListView下拉刷新上拉加载实例Demo"就是一个这样的示例项目,它旨在帮助开发者理解和实现这种交互模式。 下拉刷新...

    Android代码-ListView分页功能源码.zip

    本压缩包"Android代码-ListView分页功能源码.zip"提供了一个关于ListView分页功能的示例源码,有助于开发者理解和应用这一技术。 1. **ListView基本概念** - ListView是Android SDK中的一个视图容器,可以显示一列...

    Qt qml中listview 列表视图控件(下拉刷新、上拉分页、滚动轴)

    Qt qml listview下拉刷新和上拉分页主要根据contentY来判断。但要加上顶部下拉指示器、滚动条,并封装成可简单调用的组件,着实花了我不少精力:) 先给大家展示下效果图: 【功能】 下拉刷新和上拉分页逻辑 /...

    ListView动态加载刷新

    2. **数据加载**:当ListView滑动到底部时,需要触发加载更多数据的逻辑。可以通过监听ListView的`OnScrollListener`,在`onScrollStateChanged()`方法中判断是否达到底部。当`scrollState`为SCROLL_STATE_IDLE...

Global site tag (gtag.js) - Google Analytics