Android 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插件的简单示例

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

(一)导入文件
1.下载PullToRefresh开发库
2.导入PullToRefresh开发库

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

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

3.依赖开发包

在项目的build.gradle中添加依赖
//加载工程项目包:下拉刷新上拉加载!
compile project(‘:pulltorefresh’)
也可以使用操作依赖
这里写图片描述

下面一个案例:

这里写图片描述

MainActivity主方法:
public class MainActivity extends AppCompatActivity {

    PullToRefreshScrollView ptrsl;
    ScrollListView slv;

    List<String> list = new ArrayList<>();//ListView中的数据集合
    ArrayAdapter adapter;//ListView的适配器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ptrsl = (PullToRefreshScrollView) findViewById(R.id.ptrsl);
        slv = (ScrollListView) findViewById(R.id.slv);

        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);
        //给ListVIew设置适配器
        slv.setAdapter(adapter);
        //给上拉加载下拉刷新控件设置监听对象
        ptrsl.setOnRefreshListener(refresh);
        //设置可以上拉和下拉,否则默认支持的是下拉
        ptrsl.setMode(PullToRefreshBase.Mode.BOTH);
    }


    /**
     * 刷新的监听对象
     */
    PullToRefreshBase.OnRefreshListener2<ScrollView> refresh = new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
        //在顶部时,。。。下拉刷新
        @Override
        public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {
            ptrsl.setRefreshing();
            ptrsl.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<ScrollView> refreshView) {
            ptrsl.setRefreshing();
            ptrsl.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();
            ptrsl.onRefreshComplete();
        }
    };
}
xml布局
<?xml version="1.0" encoding="utf-8"?>
<com.handmark.pulltorefresh.library.PullToRefreshScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/ptrsl"
    tools:context="com.example.administrator.testdemo.MainActivity">

    <com.example.administrator.testdemo.ScrollListView
        android:id="@+id/slv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


</com.handmark.pulltorefresh.library.PullToRefreshScrollView>
自定义的ScrollListView
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);
    }
}

总体来说用起来还是很容易的 程序中下拉时,上面显示的界面的提示也是可以自定义的。对下载的库文件里面的src中的layout的文件pull_to_refresh_header_vertical.xml文件进行修改就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值