PullToRefresh

1. 导入库

clone:https://github.com/chrisbanes/Android-PullToRefresh.git
可以把 library 文件夹重命名为 PullToRefresh。
Android Studio 中 File => New => Import Module,导入 PullToRefresh 文件夹。

dependencies {
    ......
    compile project(':pullToRefresh')
}

还要把自己工程和 PullToRefresh 的 build.gradle 文件里的版本统一:

android {
    compileSdkVersion 24
    buildToolsVersion "23.0.2"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 24
    }

Rubuild 后就能用了。

2. 简单使用

    
    
    // Set a listener to be invoked when the list should be refreshed.
    PullToRefreshListView pullToRefreshView = (PullToRefreshListView) findViewById(R.id.pull_to_refresh_listview);
    pullToRefreshView.setOnRefreshListener(new OnRefreshListener() {
        @Override
        public void onRefresh(PullToRefreshBase refreshView) {
            // Do work to refresh the list here.
            new GetDataTask().execute();
        }
    });

    private class GetDataTask extends AsyncTask {
        ...
        @Override
        protected void onPostExecute(String[] result) {
            // Call onRefreshComplete when the list has been refreshed.
            pullToRefreshView.onRefreshComplete();
            super.onPostExecute(result);
        }
    }
  • 得到 View 的实例:getRefreshableView()

3. 自定义 PullToRefresh View

  • PullToRefresh 只支持以下 View:

  • ListView

  • ExpandableListView

  • GridView

  • WebView

  • ScrollView

  • HorizontalScrollView

  • ViewPager

  • 如 RecyclerView、NestedScrollView 等,可以自己封装一个。

1. 新建类继承 PullToRefreshBase
2. 复写几个构造方法
3. 复写四个重要抽象方法
public class PullToRefreshNestedScrollView extends PullToRefreshBase {

    public PullToRefreshNestedScrollView(Context context) {
        super(context);
    }

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

    public PullToRefreshNestedScrollView(Context context, Mode mode) {
        super(context, mode);
    }

    public PullToRefreshNestedScrollView(Context context, Mode mode, AnimationStyle animStyle) {
        super(context, mode, animStyle);
    }

    //  滑动方向
    //  Orientation.VERTICAL、Orientation.HORIZONTAL
    @Override
    public Orientation getPullToRefreshScrollDirection() {
        return Orientation.VERTICAL;
    }

    //  滑动的 View
    //  创建一个想应用于的 View 的实例就行
    @Override
    protected NestedScrollView createRefreshableView(Context context, AttributeSet attrs) {
        return new MyNestedScrollView(context, attrs);
    }

    //  判断是否滑动到底部了,返回 true 就会执行上拉加载
    @Override
    protected boolean isReadyForPullEnd() {
        //  写判断逻辑
        return false;
    }

    //  判断是否滑动到顶部了,返回 true 就会执行下拉刷新
    @Override
    protected boolean isReadyForPullStart() {
        //  写判断逻辑
        return false;
    }
}

4. 自定义属性

res/values/attrs.xml 中:


    

        
        

        
        

        
        

        
        

        
        
             
             
             
             
             

            
            
            
        

        
        

        
        

        
        

        
        
        

        
        
        

        
        
            
            
        

        
        

        
        

        
        

        
        
        
        

    

使用方法:
  1. 在布局文件头部加入xmlns:ptr="http://schemas.android.com/apk/res-auto"
  2. 在 PullToRefreshView 节点使用ptr:ptrMode="both"等进行设置。

你可能感兴趣的:(PullToRefresh)