Android实现上拉加载更多功能以及下拉刷新功能,

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

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

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

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

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

1、布局文件activity_main.xml

01 <RelativeLayoutxmlns: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 publicbooleanisHeaderShown() {
2 returngetHeaderLayout().isShown();
3 }
4
5 publicbooleanisFooterShown() {
6 returngetFooterLayout().isShown();
7 }

3、在Activity的代码如下:

01 publicclassMainActivityextendsListActivity {
02
03 privatePullToRefreshListView mPullToRefreshListView;
04
05 privateLinkedList<String> mItemList;
06 privateArrayAdapter<String> adapter;
07
08 privateContext context;
09 @Override
10 protectedvoidonCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 setContentView(R.layout.activity_main);
13 context =this;
14 initData();
15
16 adapter =newArrayAdapter<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(newOnRefreshListener<ListView>() {
28
29 @Override
30 publicvoidonRefresh(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 privatevoidinitData(){
47 //初始化数据
48 mItemList =newLinkedList<String>();
49 mItemList.addAll(Arrays.asList(data));
50
51 }
52
53 privateString[] data =newString[]{"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

更多相关文章

  1. android 官网处理图片 代码
  2. android手机震动代码
  3. Android随笔之标题栏的去除以及自定义
  4. Android(安卓)界面刷新
  5. Android实用插件,持续更新
  6. Android子线程不可以刷新UI么?
  7. 仿照TapTap做的一个demo,运用了Rxjava+Retrofit+MaterialDesign
  8. Android(安卓)Studio下OpenCV及JNI开发
  9. 将Android(安卓)Studio默认布局ConstraintLayout切换成LinearLay

随机推荐

  1. Android绘制流程窗口启动流程分析(上)
  2. Android(安卓)ADT 离线下载技巧(告别在线
  3. 【Android】Android(安卓)Studio中新创建
  4. Chrome for Android(安卓)编译了两天终于
  5. 有关android加快开机速度
  6. Android(安卓)WakeLock详解
  7. Android(安卓)布局动画
  8. android 开机自动运行程序
  9. android Activity活动周期 Service生命周
  10. 理解 Android(安卓)上的安全性