下拉刷新上拉加载之PullToRefreshListView的用法

一、导入library

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

as中file-》new-》import module,导入下载包种的library目录,会自动转成as的library模块,并生成gradle文件,记得修改gradle中编译sdk版本和编译工具的版本:

需要将第三方库中build.gradle下编译器版本改成和工程项目的一致

  如,项目的编译器版本为

    compileSdkVersion 23
    buildToolsVersion "23.0.2"

  如果默认配置为如下版本,不修改则会出现异常。

    compileSdkVersion 17
    buildToolsVersion "21.1.2"

如果编译的sdk为23,会出现语法错误,把不再支持的FloatMath改成Math即可,因为前者已经过时

导入完毕后,在工程项目中添加对此library的依赖即可

二。布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <!--    就是相当于ListView控件,用这段来代替原是ListView控件的代码 -->
    <com.handmark.pulltorefresh.library.PullToRefreshListView
        xmlns:ptr="http://schemas.android.com/apk/res-auto"
        android:id="@+id/pull_refresh_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:cacheColorHint="#00000000"
        android:divider="#19000000"
        android:dividerHeight="4dp"
        ptr:ptrDrawable="@mipmap/detail_icon_update"
        ptr:ptrAnimationStyle="flip"//设置
        android:fastScrollEnabled="false"
        android:footerDividersEnabled="false"
        android:headerDividersEnabled="false"
        android:smoothScrollbar="true" />
</LinearLayout>  

ptr是pullToRefresh的配置属性 使用是需要添加 xmlns:ptr="http://schemas.android.com/apk/res-auto"

ptr:ptrDrawable=“” 上拉下拉图标
ptr:ptrAnimationStyle=""  图标动画  取值: flip:翻转 rotate旋转
ptr:ptrHeaderBackground=""  上拉下拉时 头部的背景色
ptr:ptrHeaderTextColor=""     上拉下拉时 文字颜色

三。初始化PullToRefreshListView
private void initView() {
    mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list);
    mPullRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);
    ILoadingLayout layoutHead = mPullRefreshListView.getLoadingLayoutProxy(true, false);
    layoutHead.setRefreshingLabel("下拉刷新");
    layoutHead.setRefreshingLabel("正在载入......");
    layoutHead.setReleaseLabel("放开刷新");

    ILoadingLayout layoutFoot = mPullRefreshListView.getLoadingLayoutProxy(false,true);
    layoutFoot.setRefreshingLabel("上拉加载更多");
    layoutFoot.setRefreshingLabel("正在加载......");
    layoutFoot.setReleaseLabel("放开加载");
}
四。设置监听
mPullRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
    @Override
    public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
        new GetDataTask().execute();
    }

    @Override
    public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
        mListItems.addLast("1");
        new GetDataTask().execute();
    }
  });
 private class GetDataTask extends AsyncTask<Void, Void, String> {
        //后台处理部分
        @Override
        protected String doInBackground(Void... params) {

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
            String str="Added after refresh...I add";
            return str;
        }

        //这里是对刷新的响应,可以利用addFirst()和addLast()函数将新加的内容加到LISTView中
        //根据AsyncTask的原理,onPostExecute里的result的值就是doInBackground()的返回值
        @Override
        protected void onPostExecute(String result) {
            //在头部增加新添内容
            mListItems.addFirst(result);
//            mListItems.addLast(result);
            //通知程序数据集已经改变,如果不做通知,那么将不会刷新mListItems的集合
            mAdapter.notifyDataSetChanged();
            // Call onRefreshComplete when the list has been refreshed.
            mPullRefreshListView.onRefreshComplete();
            super.onPostExecute(result);
        }
    }
五.整个项目黏贴代码
package com.kxd.pulltorefreshtest;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.util.Arrays;
import java.util.LinkedList;

public class MainActivity extends Activity {
    private String[] mStrings = { "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi",
            "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre",
            "Allgauer Emmentaler", "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi",
            "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre",
            "Allgauer Emmentaler" };
    private LinkedList<String> mListItems;
    private PullToRefreshListView mPullRefreshListView;
    private ArrayAdapter<String> mAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
        mPullRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                new GetDataTask().execute();
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                mListItems.addLast("1");
                new GetDataTask().execute();
            }
          });

        mListItems = new LinkedList<String>();
        mListItems.addAll(Arrays.asList(mStrings));
        mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mListItems);

        //这两个绑定方法用其一
        // 方法一
//       mPullRefreshListView.setAdapter(mAdapter);
        //方法二
        ListView actualListView = mPullRefreshListView.getRefreshableView();
        actualListView.setAdapter(mAdapter);
    }

    private void initView() {
        mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list);
        mPullRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);
        ILoadingLayout layoutHead = mPullRefreshListView.getLoadingLayoutProxy(true, false);
        layoutHead.setRefreshingLabel("下拉刷新");
        layoutHead.setRefreshingLabel("正在载入......");
        layoutHead.setReleaseLabel("放开刷新");

        ILoadingLayout layoutFoot = mPullRefreshListView.getLoadingLayoutProxy(false,true);
        layoutFoot.setRefreshingLabel("上拉加载更多");
        layoutFoot.setRefreshingLabel("正在加载......");
        layoutFoot.setReleaseLabel("放开加载");
    }


    private class GetDataTask extends AsyncTask<Void, Void, String> {
        //后台处理部分
        @Override
        protected String doInBackground(Void... params) {

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
            String str="Added after refresh...I add";
            return str;
        }

        //这里是对刷新的响应,可以利用addFirst()和addLast()函数将新加的内容加到LISTView中
        //根据AsyncTask的原理,onPostExecute里的result的值就是doInBackground()的返回值
        @Override
        protected void onPostExecute(String result) {
            //在头部增加新添内容
            mListItems.addFirst(result);
//            mListItems.addLast(result);
            //通知程序数据集已经改变,如果不做通知,那么将不会刷新mListItems的集合
            mAdapter.notifyDataSetChanged();
            // Call onRefreshComplete when the list has been refreshed.
            mPullRefreshListView.onRefreshComplete();
            super.onPostExecute(result);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值