您的位置:首页 > 移动开发 > Android开发

android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)

2014-01-14 13:45 1256 查看
Android实现上拉加载更多功能以及下拉刷新功能,

采用了目前比较火的PullToRefresh,他是目前实现比较好的下拉刷新的类库。

目前他支持的控件有:ListView, ExpandableListView,GridView,WebView等。

下载地址:https://github.com/chrisbanes/Android-PullToRefresh

首先第一步当然是导入libriay到咱们的项目了,具体导入方式,这里不再赘述。

下面是个例子采用的是ListView,当然其余的和这个类似

1、布局文件activity_main.xml

01
<
RelativeLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
02
xmlns:tools
=
"http://schemas.android.com/tools"
03
android:layout_width
=
"match_parent"
04
android:layout_height
=
"match_parent"
05
tools:context
=
".MainActivity"
>
06
07
  
<
com.handmark.pulltorefresh.library.PullToRefreshListView
08
android:id
=
"@+id/pull_refresh_list"
09
android:layout_width
=
"fill_parent"
10
android:layout_height
=
"fill_parent"
/>
11
</
RelativeLayout
>
2、要实现下拉刷新的功能很简单,只需要实现OnRefreshListener的OnRefresh方法即可。这里说一下如何实现上拉和下拉分别执行不同的操作。

这里参考了http://blog.csdn.net/ueryueryuery/article/details/17440465

原理是:根据下拉和上拉显示的布局的可见状态类区分上拉还是下拉,然后执行相应操作。

在PullToRefresh的类库的com.handmark.pulltorefresh.library包下,打开PullToRefreshBase.java,在这个类的最后面添加如下代码:

1
public
boolean
isHeaderShown()
{
2
return
getHeaderLayout().isShown();
3
}
4
5
public
boolean
isFooterShown()
{
6
return
getFooterLayout().isShown();
7
}
3、在Activity的代码如下:

01
public
class
MainActivity
extends
ListActivity
{
02
03
private
PullToRefreshListView
mPullToRefreshListView;
04
 
05
private
LinkedList<String>
mItemList;
06
private
ArrayAdapter<String>
adapter;
07
 
08
private
Context
context;
09
@Override
10
protected
void
onCreate(Bundle
savedInstanceState) {
11
super
.onCreate(savedInstanceState);
12
setContentView(R.layout.activity_main);
13
context
=
this
;
14
initData();
15
 
16
adapter
=
new
ArrayAdapter<String>(
this
,
android.R.layout.simple_list_item_1, mItemList);
17
 
18
//初始化控件
19
mPullToRefreshListView
= (PullToRefreshListView)findViewById(R.id.pull_refresh_list);
20
ListView
mListView = mPullToRefreshListView.getRefreshableView();
21
mListView.setAdapter(adapter);
22
 
23
//设置pull-to-refresh模式为Mode.Both
24
mPullToRefreshListView.setMode(Mode.BOTH);
25
 
26
//设置上拉下拉事件
27
mPullToRefreshListView.setOnRefreshListener(
new
OnRefreshListener<ListView>()
{
28
29
@Override
30
public
void
onRefresh(PullToRefreshBase<ListView>
refreshView) {
31
 
32
if
(refreshView.isHeaderShown()){
33
Toast.makeText(context,
"下拉刷新"
,Toast.LENGTH_SHORT).show();
34
//下拉刷新
业务代码
35
}
else
{
36
Toast.makeText(context,
"上拉加载更多"
,Toast.LENGTH_SHORT).show();
37
//上拉加载更多
业务代码
38
}
39
 
40
}
41
});
42
 
43
}
44
45
46
private
void
initData(){
47
//初始化数据
48
mItemList
=
new
LinkedList<String>();
49
mItemList.addAll(Arrays.asList(data));
50
 
51
}
52
 
53
private
String[]
data  =
new
String[]{
"data1"
,
"data2"
,
"data3"
,
"data4"
,
"data5"
,
"data6"
,
54
"data1"
,
"data2"
,
"data3"
,
"data4"
,
"data5"
,
"data6"
};
55
}
如上代码所示,在OnRefresh的实现代码中,用以区分上拉还是下拉,关键代码如下:

1
if
(refreshView.isHeaderShown()){
2
Toast.makeText(context,
"下拉刷新"
,Toast.LENGTH_SHORT).show();
3
//下拉刷新
业务代码
4
}
else
{
5
Toast.makeText(context,
"上拉加载更多"
,Toast.LENGTH_SHORT).show();
6
//上拉加载更多
业务代码
7
}
至此,运行项目,可以得到演示结果了

原文地址 : http://www.dutycode.com/post-13.html

我的博客:http://www.dutycode.com

参考网址:http://blog.csdn.net/ueryueryuery/article/details/17440465
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐