使用XRefreshView实现下拉刷新下拉加载

github上的地址:https://github.com/huxq17/XRefreshView;

简单的实现了下ListView,RecyclerView的上拉下拉:



首先依赖一下XRefresh的库:

上代码:

activity_main:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.zhihui.xrefreshview.MainActivity">

   <Button
       android:layout_width="match_parent"
       android:layout_height="48dp"
       android:text="listViewActivity"
       android:textAllCaps="false"
       android:onClick="listViewActivity"/>
   <Button
       android:layout_width="match_parent"
       android:layout_height="48dp"
       android:text="RecyclerViewActivity"
       android:textAllCaps="false"
       android:onClick="recyclerViewActivity"/>

</LinearLayout>

MainActivity:

package com.zhihui.xrefreshview;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void listViewActivity(View view){
        startActivity(new Intent(MainActivity.this,ListViewActivity.class));
    }

    public void recyclerViewActivity(View view){
        startActivity(new Intent(MainActivity.this,LinearRecyclerViewActivity.class));
    }
}

activity_list_view布局:

<com.andview.refreshview.XRefreshView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:xrefreshview="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/custom_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    android:orientation="vertical"
    xrefreshview:isHeightMatchParent="true"
    xrefreshview:isWidthMatchParent="true" >

    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</com.andview.refreshview.XRefreshView>

package com.zhihui.xrefreshview;

import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import com.andview.refreshview.XRefreshView;
import com.andview.refreshview.utils.LogUtils;

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

public class ListViewActivity extends AppCompatActivity {
    private ListView lv;
    private List<String> str_name = new ArrayList<String>();
    private XRefreshView refreshView;
    private ArrayAdapter<String> adapter;
    public static long lastRefreshTime;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_view);
        for (int i = 0; i <14; i++) {
            str_name.add("数据" + i);
        }
        lv = (ListView) findViewById(R.id.lv);
        refreshView = (XRefreshView) findViewById(R.id.custom_view);

        adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, str_name);
        lv.setAdapter(adapter);

        // 设置是否可以下拉刷新
        refreshView.setPullRefreshEnable(true);
        // 设置是否可以上拉加载
        refreshView.setPullLoadEnable(true);
        // 设置上次刷新的时间
        refreshView.restoreLastRefreshTime(lastRefreshTime);
        //当下拉刷新被禁用时,调用这个方法并传入false可以不让头部被下拉
        refreshView.setMoveHeadWhenDisablePullRefresh(true);
        // 设置时候可以自动刷新
        refreshView.setAutoRefresh(false);
//		refreshView.setOnBottomLoadMoreTime(new OnBottomLoadMoreTime() {
//			@Override
//			public boolean isBottom() {
//				return false;
//			}
//		});

        refreshView.setXRefreshViewListener(new XRefreshView.SimpleXRefreshListener() {
            @Override
            public void onRefresh(boolean isPullDown) {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        refreshView.stopRefresh();
                        lastRefreshTime = refreshView.getLastRefreshTime();
                    }
                }, 2000);
            }

            @Override
            public void onLoadMore(boolean isSilence) {
                new Handler().postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        refreshView.stopLoadMore();
                    }
                }, 2000);
            }

            @Override
            public void onRelease(float direction) {
                super.onRelease(direction);
                if (direction > 0) {
                    toast("下拉");
                } else {
                    toast("上拉");
                }
            }
        });
        refreshView.setOnAbsListViewScrollListener(new AbsListView.OnScrollListener() {

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                LogUtils.i("onScrollStateChanged");
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                                 int visibleItemCount, int totalItemCount) {
                LogUtils.i("onScroll");
            }
        });

    }

    public void toast(String msg) {
        Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
    }

}


activity_linear_recycler_view布局:

<RelativeLayout 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">

    <com.andview.refreshview.XRefreshView
        android:id="@+id/xrefreshview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#fff">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view_test_rv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="2dp"
            android:background="#bbccaa"
            android:scrollbars="vertical" />
    </com.andview.refreshview.XRefreshView>

</RelativeLayout>


package com.zhihui.xrefreshview;

import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import com.andview.refreshview.XRefreshView;

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

import butterknife.Bind;
import butterknife.ButterKnife;

public class LinearRecyclerViewActivity extends AppCompatActivity {

    @Bind(R.id.recycler_view_test_rv)
    RecyclerView recyclerView;
    @Bind(R.id.xrefreshview)
    XRefreshView xRefreshView;
    private List<String> listData;
    private MyAdapter adapter;
    LinearLayoutManager layoutManager;
    private int mLoadCount = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_linear_recycler_view);
        ButterKnife.bind(this);
        recyclerView.setHasFixedSize(true);
        initData();
        adapter=new MyAdapter(this,listData);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        // 静默加载模式不能设置footerview
        recyclerView.setAdapter(adapter);
        //设置刷新完成以后,headerview固定的时间
        xRefreshView.setPinnedTime(1000);
//        xRefreshView.setMoveForHorizontal(true);
        xRefreshView.setPullLoadEnable(true);
        xRefreshView.setAutoLoadMore(false);
//        adapter.setCustomLoadMoreView(new XRefreshViewFooter(this));
        xRefreshView.enableReleaseToLoadMore(true);
        xRefreshView.enableRecyclerViewPullUp(true);
        xRefreshView.enablePullUpWhenLoadCompleted(true);

        xRefreshView.setXRefreshViewListener(new XRefreshView.SimpleXRefreshListener() {

            @Override
            public void onRefresh(boolean isPullDown) {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        xRefreshView.stopRefresh();
                    }
                }, 500);
            }

            @Override
            public void onLoadMore(boolean isSilence) {
                new Handler().postDelayed(new Runnable() {
                    public void run() {
                        mLoadCount++;
                        if (mLoadCount >= 3) {//模拟没有更多数据的情况
                            xRefreshView.setLoadComplete(true);
                        } else {
                            // 刷新完成必须调用此方法停止加载
                            xRefreshView.stopLoadMore(false);
                            //当数据加载失败 不需要隐藏footerview时,可以调用以下方法,传入false,不传默认为true
                        }
                    }
                }, 1000);
            }
        });
    }

    private void initData() {
        listData = new ArrayList<>();
        for (int i = 0; i < 15; i++) {
            listData.add("我是第" + i + "个item");
        }
    }
}


recycler_view布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    xmlns:card_view="http://schemas.android.com/tools"
    android:layout_gravity="center"
    android:foreground="?android:attr/selectableItemBackground"
    card_view:cardBackgroundColor="@android:color/white"
    card_view:cardCornerRadius="8dp"
    android:layout_margin="5dp"
    android:paddingBottom="5dp"
    card_view:cardElevation="4dp">
    <LinearLayout
        android:id="@+id/recycler_view_test_item_person_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="15dp">

        <TextView
            android:id="@+id/item_tv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="18sp" />

    </LinearLayout>
</android.support.v7.widget.CardView>

package com.zhihui.xrefreshview;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;

/**
 * Created by Administrator on 2017/6/16.
 */

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private Context context;
    private List<String> datas;

    public MyAdapter(Context context, List<String> datas) {
        this.context = context;
        this.datas = datas;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(
                R.layout.recycler_item, parent, false);

        return new MyViewHolder(v);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.tv.setText(datas.get(position));
    }

    @Override
    public int getItemCount() {
        return datas.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {

        private final TextView tv;

        public MyViewHolder(View itemView) {
            super(itemView);
            tv = (TextView) itemView.findViewById(R.id.item_tv);
        }
    }
}




猜你喜欢

转载自blog.csdn.net/qq_35828720/article/details/73338077
今日推荐