展会信息港展会大全

android listView滑动刷新代码(分页功能)
来源:互联网   发布日期:2015-11-26 10:09:58   浏览:2533次  

导读:这三个代码都是从网上下载来的,但是导入到eclipse里面以后,中文注释出现乱码,所以我文章里面的注释有很多可能是自己添加的,如有不准确的地方,敬请谅解和留言告知!这个例子是listview一开始显示10个,下拉l......

这三个代码都是从网上下载来的,但是导入到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;

获取最下面那个item的id(position)值.

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要完全显示出来才算)

赞助本站

人工智能实验室

相关热词: listView 滑动 刷新 分页

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港