Android-PullToRefresh下拉上拉刷新的库基本用法

一.PullToRefresh的基础知识

PullToRefresh是一套实现非常好的下拉刷新库,它支持:
ListView
ExpandableListView
GridView
WebView
ScrollView
HorizontalScrollView
ViewPager
等多种常用的需要刷新的View类型,而且使用起来也十分方便。
(GitHub地址:https://github.com/chrisbanes/Android-PullToRefresh)

PullToRefresh基本用法:
1、在布局文件中添加PullToRefresh控件,比如PullToRefreshListView;
2、在Activity中,设置监听器OnRefreshListener以响应用户下拉操作;
3、在监听器的onRefresh()方法中执行数据刷新操作,可以通过AsyncTask或Handler来实现;
4、获取到数据后,记得调用onRefreshComplete()方法通知PullToRefresh控件数据已获取完毕,可以结束刷新操作。

这是我自己下载的PullToRefresh的开发lib项目包,可能和上面的GitHub中的不一样:
http://download.csdn.net/detail/wenzhi20102321/9705593

二.使用PullToRefresh插件的简单示例

这里演示使用的是PullToRefreshScrollView。下拉时在最上面添加数据,上拉时在最下面添加数据。

(一)导入文件

1.下载PullToRefresh开发库

2.导入PullToRefresh开发库

下载后,解压到某个位置,Studio导入要求路径中不能有中文!
这里以AndroidStudio演示导入示例:
File–>New—>Import Module–>选择你解压后的开发包文件,如图:

选择路径后点击确定。
在Android项目中显示为:

3.依赖开发包

在项目的build.gradle中添加依赖
//加载工程项目包:下拉刷新上拉加载!
compile project(‘:pulltorefresh’)
也可以使用操作依赖
Android-PullToRefresh下拉上拉刷新的库基本用法_第1张图片
效果一样的。

(二)布局文件activity_main.xml设计

"1.0" encoding="utf-8"?>
<com.handmark.pulltorefresh.library.PullToRefreshScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_ptfv"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    //自定义的ListView,使用自己的包名+类名
    .pulldemo.ScrollListView
        android:id="@+id/main_scroll"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

com.handmark.pulltorefresh.library.PullToRefreshScrollView>

(三)自定义的ListView

这里在ScrollView添加一个ListView,这个ListView要做一点处理。

package lesson10_fragmentfordata.pulldemo;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;

/**
 * 可滚动的ListView,这里是因为这个ListView被包裹在一个ScrollView中才需要设置纵向拉伸
 */

public class ScrollListView extends ListView {
    public ScrollListView(Context context) {
        super(context);
    }

    public ScrollListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int height = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, height);
    }
}

(四)主方法的类

package lesson10_fragmentfordata.pulldemo;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ScrollView;

import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshScrollView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    PullToRefreshScrollView main_ptfv;//上拉下拉控件对象
    ScrollListView scrollListView;//自定义的ListVeiw
    List list = new ArrayList<>();//ListView中的数据集合
    ArrayAdapter adapter;//ListView的适配器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //给集合添加数据
        for (int i = 0; i < 2; i++) {
            list.add("" + i);
        }
        //适配器的视图使用Android系统自带的TextView布局
        adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1, list);
        main_ptfv = (PullToRefreshScrollView) findViewById(R.id.main_ptfv);
        scrollListView = (ScrollListView) findViewById(R.id.main_scroll);
        //给ListVIew设置适配器
        scrollListView.setAdapter(adapter);
        //给上拉加载下拉刷新控件设置监听对象
        main_ptfv.setOnRefreshListener(refresh);
        //设置可以上拉和下拉,否则默认支持的是下拉
        main_ptfv.setMode(PullToRefreshBase.Mode.BOTH);
    }

    /**
     * 刷新的监听对象
     */
    PullToRefreshBase.OnRefreshListener2 refresh = new PullToRefreshBase.OnRefreshListener2() {
        //在顶部时,。。。下拉刷新
        @Override
        public void onPullDownToRefresh(PullToRefreshBase refreshView) {
            main_ptfv.setRefreshing();
            main_ptfv.smoothScrollTo(-100);//设置拉出多长的距离才显示刷新效果
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    handler.sendEmptyMessage(1);//发送Handler的what为1,代表下拉
                }
            }).start();

        }

        //在底部时,。。。上拉刷新
        @Override
        public void onPullUpToRefresh(PullToRefreshBase refreshView) {
            main_ptfv.setRefreshing();
            main_ptfv.smoothScrollTo(-100);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    handler.sendEmptyMessage(2);//发送Handler的what为2,代表上拉
                }
            }).start();

        }
    };

    //创建Hadler,数据数据并处理
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 1) {
                list.add(0, "下拉刷新!");//把数据放在最前面
            } else if (msg.what == 2) {
                list.add("上拉刷新!");//把数据放在最后面
            }
            adapter.notifyDataSetChanged();
            main_ptfv.onRefreshComplete();
        }
    };

}

运行后显示的界面:
Android-PullToRefresh下拉上拉刷新的库基本用法_第2张图片
下拉时显示的界面:
Android-PullToRefresh下拉上拉刷新的库基本用法_第3张图片

松开下拉时的界面:
Android-PullToRefresh下拉上拉刷新的库基本用法_第4张图片

上拉时的界面:

Android-PullToRefresh下拉上拉刷新的库基本用法_第5张图片
      程序中下拉时,上面显示的界面的提示也是可以自定义的。对下载的库文件里面的src中的layout的文件pull_to_refresh_header_vertical.xml文件进行修改就可以了。
      在应用中上拉下拉都是用于网络数据的请求更新。

你可能感兴趣的:(android,插件,Android网络)