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
mItemList;
06
private ArrayAdapter
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(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()
{
28
29
@Override
30
public void onRefresh(PullToRefreshBase
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();
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