Android实现上拉加载更多功能以及下拉刷新功能,
采用了目前比较火的PullToRefresh,他是目前实现比较好的下拉刷新的类库。
目前他支持的控件有:ListView, ExpandableListView,GridView,WebView等。
下载地址:https://github.com/chrisbanes/Android-PullToRefresh
首先第一步当然是导入libriay到咱们的项目了,具体导入方式,这里不再赘述。
下面是个例子采用的是ListView,当然其余的和这个类似
1、布局文件activity_main.xml
03
|
android:layout_width = "match_parent"
|
04
|
android:layout_height = "match_parent"
|
05
|
tools:context = ".MainActivity" >
|
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" />
|
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();
|
5
|
public boolean isFooterShown()
{
|
6
|
return getFooterLayout().isShown();
|
3、在Activity的代码如下:
01
|
public class MainActivity extends ListActivity
{
|
03
|
private PullToRefreshListView
mPullToRefreshListView;
|
05
|
private LinkedList<String>
mItemList;
|
06
|
private ArrayAdapter<String>
adapter;
|
08
|
private Context
context;
|
10
|
protected void onCreate(Bundle
savedInstanceState) {
|
11
|
super .onCreate(savedInstanceState);
|
12
|
setContentView(R.layout.activity_main);
|
16
|
adapter
= new ArrayAdapter<String>( this ,
android.R.layout.simple_list_item_1, mItemList);
|
19
|
mPullToRefreshListView
= (PullToRefreshListView)findViewById(R.id.pull_refresh_list);
|
20
|
ListView
mListView = mPullToRefreshListView.getRefreshableView();
|
21
|
mListView.setAdapter(adapter);
|
24
|
mPullToRefreshListView.setMode(Mode.BOTH);
|
27
|
mPullToRefreshListView.setOnRefreshListener( new OnRefreshListener<ListView>()
{
|
30
|
public void onRefresh(PullToRefreshBase<ListView>
refreshView) {
|
32
|
if (refreshView.isHeaderShown()){
|
33
|
Toast.makeText(context, "下拉刷新" ,Toast.LENGTH_SHORT).show();
|
36
|
Toast.makeText(context, "上拉加载更多" ,Toast.LENGTH_SHORT).show();
|
46
|
private void initData(){
|
48
|
mItemList
= new LinkedList<String>();
|
49
|
mItemList.addAll(Arrays.asList(data));
|
53
|
private String[]
data = new String[]{ "data1" , "data2" , "data3" , "data4" , "data5" , "data6" ,
|
54
|
"data1" , "data2" , "data3" , "data4" , "data5" , "data6" };
|
如上代码所示,在OnRefresh的实现代码中,用以区分上拉还是下拉,关键代码如下:
1
|
if (refreshView.isHeaderShown()){
|
2
|
Toast.makeText(context, "下拉刷新" ,Toast.LENGTH_SHORT).show();
|
5
|
Toast.makeText(context, "上拉加载更多" ,Toast.LENGTH_SHORT).show();
|
至此,运行项目,可以得到演示结果了
原文地址 : http://www.dutycode.com/post-13.html
我的博客:http://www.dutycode.com
参考网址:http://blog.csdn.net/ueryueryuery/article/details/17440465
android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)