天天看点

RecyclerView实现下拉刷新与自动加载控件封装

前端时间自己整合了一个listview实现的下拉刷新上拉自动加载的demo,有需要的看这里listview实现下拉刷新上拉自动加载,由于新版本APP采用到RecyclerView,发现找不到一个好的简单的效果,于是抽几天时间,结合大牛们的文章,整合出一个比较简洁的RecyclerView实现下拉刷新与自动加载控件

一.废话不多少看效果(本人比较笨,不会制作动态图,哈哈哈):

1.第一进入页面的效果图      
RecyclerView实现下拉刷新与自动加载控件封装

2.数据为空的效果图

RecyclerView实现下拉刷新与自动加载控件封装

3.下拉刷新的效果

RecyclerView实现下拉刷新与自动加载控件封装

4.加载更多时效果

RecyclerView实现下拉刷新与自动加载控件封装

5.没有更多数据时的效果

RecyclerView实现下拉刷新与自动加载控件封装

二.代码放送

自定义一个控件MyRecycleView 继承linearlayout,将RecycleView和SwipeRefreshLayout添加
进去即可实现下拉刷新效果,对于自动加载布局,需要添加footview,可惜RecycleView
不是自带footview,那么就要自己通过itemType的不同来实现footview,这里需要通过
adapter实现,那么就需要自己定义一个LoadMoreWrapper,用于接收设置的adapter进行装饰
        

1.自定义一个通用的adapter

CommonAdapter.java      
public abstract class CommonAdapter<T> extends RecyclerView.Adapter<ViewHolder>
{
    protected Context mContext;
    protected int mLayoutId;
    protected List<T> mDatas;
    protected LayoutInflater mInflater;
    protected OnItemClickListener mOnItemClickListener;

    public CommonAdapter(Context context, int layoutId, List<T> datas)
    {
        mContext = context;
        mInflater = LayoutInflater.from(context);
        mLayoutId = layoutId;
        mDatas = datas;
    }
    protected boolean isEnabled(int viewType) {
        return true;
    }
    @Override
    public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType)
    {
        ViewHolder viewHolder = ViewHolder.createViewHolder(mContext, parent, mLayoutId);
        setListener(parent, viewHolder, viewType);
        return viewHolder;
    }
    protected void setListener(final ViewGroup parent, final ViewHolder viewHolder, int viewType) {
        if (!isEnabled(viewType)) return;
        viewHolder.getConvertView().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mOnItemClickListener != null) {
                    int position = viewHolder.getAdapterPosition();
                    mOnItemClickListener.onItemClick(v, viewHolder , position);
                }
            }
        });

        viewHolder.getConvertView().setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if (mOnItemClickListener != null) {
                    int position = viewHolder.getAdapterPosition();
                    return mOnItemClickListener.onItemLongClick(v, viewHolder, position);
                }
                return false;
            }
        });
    }
    @Override
    public void onBindViewHolder(ViewHolder holder, int position)
    {
        convert(holder, mDatas.get(position),position);
    }

    protected abstract void convert(ViewHolder holder, T t,int position);

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

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.mOnItemClickListener = onItemClickListener;
    }

    public interface OnItemClickListener {
        void onItemClick(View view, RecyclerView.ViewHolder holder, int position);

        boolean onItemLongClick(View view, RecyclerView.ViewHolder holder, int position);
    }
}

           

2.定义一个LoadMoreWrapper

LoadMoreWrapper.java      
public class LoadMoreWrapper<T> extends RecyclerView.Adapter<RecyclerView.ViewHolder>
{
    public static final int ITEM_TYPE_LOAD_MORE = Integer.MAX_VALUE - 2;

    private RecyclerView.Adapter mInnerAdapter;
    private View mLoadMoreView;
    private int mLoadMoreLayoutId;
    private RelativeLayout mFooterView;
    private View mNodataView;

    public LoadMoreWrapper(RecyclerView.Adapter adapter)
    {
        mInnerAdapter = adapter;
    }

    private boolean hasLoadMore()
    {
        return mLoadMoreView != null || mLoadMoreLayoutId != 0;
    }


    private boolean isShowLoadMore(int position)
    {
        return hasLoadMore() && (position >= mInnerAdapter.getItemCount());
    }

    @Override
    public int getItemViewType(int position)
    {
        if (isShowLoadMore(position))
        {
            return ITEM_TYPE_LOAD_MORE;
        }
        return mInnerAdapter.getItemViewType(position);
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        if (viewType == ITEM_TYPE_LOAD_MORE)
        {
            ViewHolder holder;
            if (mLoadMoreView != null)
            {
                mFooterView = (RelativeLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.myrecycle_footview, parent,
                        false);

                mNodataView=LayoutInflater.from(parent.getContext()).inflate(R.layout.myrecycle_nodata_view, parent,
                        false);
                mFooterView.addView(mLoadMoreView);
                mFooterView.addView(mNodataView);
                mNodataView.setVisibility(View.GONE);
                holder = ViewHolder.createViewHolder(parent.getContext(),mFooterView);
            } else
            {
                mFooterView = (RelativeLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.myrecycle_footview, parent,
                        false);
                mNodataView=LayoutInflater.from(parent.getContext()).inflate(R.layout.myrecycle_nodata_view, parent,
                        false);
                mLoadMoreView=LayoutInflater.from(parent.getContext()).inflate(R.layout.default_loading, parent,
                        false);
                mFooterView.addView(mLoadMoreView);
                mFooterView.addView(mNodataView);
                mNodataView.setVisibility(View.GONE);
                holder = ViewHolder.createViewHolder(parent.getContext(),mFooterView);
            }
            return holder;
        }
        return mInnerAdapter.onCreateViewHolder(parent, viewType);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position)
    {
        if (isShowLoadMore(position))
        {
            if (mOnLoadMoreListener != null)
            {
                mOnLoadMoreListener.onLoadMoreRequested();
            }
            return;
        }
        mInnerAdapter.onBindViewHolder(holder, position);
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView)
    {
        WrapperUtils.onAttachedToRecyclerView(mInnerAdapter, recyclerView, new WrapperUtils.SpanSizeCallback()
        {
            @Override
            public int getSpanSize(GridLayoutManager layoutManager, GridLayoutManager.SpanSizeLookup oldLookup, int position)
            {
                if (isShowLoadMore(position))
                {
                    return layoutManager.getSpanCount();
                }
                if (oldLookup != null)
                {
                    return oldLookup.getSpanSize(position);
                }
                return 1;
            }
        });
    }


    @Override
    public void onViewAttachedToWindow(RecyclerView.ViewHolder holder)
    {
        mInnerAdapter.onViewAttachedToWindow(holder);

        if (isShowLoadMore(holder.getLayoutPosition()))
        {
            setFullSpan(holder);
        }
    }

    private void setFullSpan(RecyclerView.ViewHolder holder)
    {
        ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();

        if (lp != null
                && lp instanceof StaggeredGridLayoutManager.LayoutParams)
        {
            StaggeredGridLayoutManager.LayoutParams p = (StaggeredGridLayoutManager.LayoutParams) lp;

            p.setFullSpan(true);
        }
    }

    @Override
    public int getItemCount()
    {
        return mInnerAdapter.getItemCount() + (hasLoadMore() ? 1 : 0);
    }




    public interface OnLoadMoreListener
    {
        void onLoadMoreRequested();
    }

    private OnLoadMoreListener mOnLoadMoreListener;

    public void setFootCanLoad(boolean footCanload) {
        if(hasLoadMore()) {
            if (footCanload) {//如果可以加载更多布局
                mNodataView.setVisibility(View.GONE);
            } else {
                mNodataView.setVisibility(View.VISIBLE);
            }
        }
    }
    public LoadMoreWrapper setOnLoadMoreListener(OnLoadMoreListener loadMoreListener)
    {
        if (loadMoreListener != null)
        {
            mOnLoadMoreListener = loadMoreListener;
        }
        return this;
    }

    public LoadMoreWrapper setLoadMoreView(View loadMoreView)
    {
        mLoadMoreView = loadMoreView;
        return this;
    }

    public LoadMoreWrapper setLoadMoreView(int layoutId)
    {
        mLoadMoreLayoutId = layoutId;
        return this;
    }
           

3.对recycleview 的封装

public class MyRecycleView<T> extends LinearLayout {
    private static int VERTICAL = LinearLayout.VERTICAL;
    private static int HORIZONTAL = LinearLayout.HORIZONTAL;

    private RecyclerView recyclerView;
    private SwipeRefreshLayout swipeRfl;
   // private LinearLayoutManager layoutManager;
    private SwipeRefreshLayout.OnRefreshListener mRefreshListener;
    private CommonAdapter mAdapter;
    private RefreshLoadMoreListener mRefreshLoadMoreListner;//下拉和加载更多监听
    private ItemClickListener itemClickListener;//item点击监听
    private LinearLayout mExceptView;
    private LinearLayout mLoadingView;
    private boolean hasMore = false;//是否还有更多数据加载
    private boolean canMore = true;//是否可以加载更多
    private boolean isCanRefresh = true;//是否可以刷新更多
    private boolean isRefresh = false;//正在刷新
    private boolean isLoadMore = false;//正在加载更多
    private LoadMoreWrapper mLoadMoreWrapper;//为了实现加载更多footview

    private static ImageView exceptIv;//异常图片控件
    private static TextView exceptTv;//异常内容文本控件

    private static ProgressBar loadingIv;//正在加载图片控件
    private static TextView loadingTv;//正在加载文本控件


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

    public MyRecycleView(Context context, AttributeSet attrs) {
        super(context, attrs);
        LinearLayout rootLl = new LinearLayout(context);
        rootLl.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.MATCH_PARENT));
        mLoadingView = initLoadingView(context);
        mLoadingView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.MATCH_PARENT));
        mExceptView = initExceptionView(context);
        mExceptView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.MATCH_PARENT));
        mExceptView.setVisibility(View.GONE);
        swipeRfl = new SwipeRefreshLayout(context);
        swipeRfl.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.MATCH_PARENT));
        swipeRfl.setColorSchemeResources(android.R.color.holo_blue_light,
                android.R.color.holo_red_light, android.R.color.holo_orange_light);
        FrameLayout bootLl = new FrameLayout(context);
        bootLl.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT));
        recyclerView = new RecyclerView(context);
        recyclerView.setVerticalScrollBarEnabled(true);
        recyclerView.setHorizontalScrollBarEnabled(true);
        recyclerView.setLayoutParams(new LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        bootLl.addView(mLoadingView);
        bootLl.addView(recyclerView);
        bootLl.addView(mExceptView);
        swipeRfl.addView(bootLl);
        rootLl.addView(swipeRfl);
        this.addView(rootLl);
        /**
         * 下拉至顶部刷新监听
         */
        mRefreshListener = new SwipeRefreshLayout.OnRefreshListener() {

            @Override
            public void onRefresh() {
                if (!isRefresh && !isLoadMore) {
                    isRefresh = true;
                    refresh();
                }
            }
        };
        swipeRfl.setOnRefreshListener(mRefreshListener);
        recyclerView.setHasFixedSize(true);//不是瀑布流这个将可以优化性能
    }


    public MyRecycleView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 错误提示界面初始化
     *
     * @param context
     * @return
     */
    private LinearLayout initExceptionView(Context context) {
        LinearLayout rootLl = new LinearLayout(context);
        rootLl.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.MATCH_PARENT));
        rootLl.setOrientation(LinearLayout.VERTICAL);
        rootLl.setGravity(Gravity.CENTER);
        exceptIv = new ImageView(context);
        exceptIv.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // 点击图片刷新
                if (!isRefresh) {
                    swipeRfl.setRefreshing(true);
                    isRefresh = true;
                    refresh();
                }
            }
        });
        //底部边距
        LinearLayout.LayoutParams ll = new LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        ll.setMargins(0, 0, 0, 32);
        exceptIv.setLayoutParams(ll);
        exceptTv = new TextView(context);
        exceptTv.setLayoutParams(ll);
        exceptTv.setTextSize(20.0f);
        exceptTv.setTextColor(Color.DKGRAY);
        //提示操作文本
        TextView alertTv = new TextView(context);
        alertTv.setLayoutParams(ll);
        alertTv.setLayoutParams(ll);
        alertTv.setTextSize(18.0f);
        alertTv.setTextColor(Color.LTGRAY);
        alertTv.setText("点击图片刷新");
        rootLl.addView(exceptIv);
        rootLl.addView(exceptTv);
        rootLl.addView(alertTv);
        return rootLl;
    }

    /**
     * 初始化正在加载页面
     *
     * @param context
     * @return
     */
    private LinearLayout initLoadingView(Context context) {
        LinearLayout rootLl = new LinearLayout(context);
        rootLl.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.MATCH_PARENT));
        rootLl.setOrientation(LinearLayout.VERTICAL);
        rootLl.setGravity(Gravity.CENTER);
        loadingIv = new ProgressBar(context);
        //底部边距
        LinearLayout.LayoutParams ll = new LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        ll.setMargins(0, 0, 0, 32);
        loadingIv.setLayoutParams(ll);
        loadingTv = new TextView(context);
        loadingTv.setLayoutParams(ll);
        loadingTv.setTextSize(20.0f);
        loadingTv.setTextColor(Color.LTGRAY);

        rootLl.addView(loadingIv);
        rootLl.addView(loadingTv);
        return rootLl;
    }

    /**
     * drawableId 错误提示图片
     * exceptStr 错误提示语
     */
    public void customExceptView(int drawableId, String exceptStr) {
        recyclerView.setVisibility(View.INVISIBLE);
        mExceptView.setVisibility(View.VISIBLE);
        mLoadingView.setVisibility(View.INVISIBLE);
        exceptIv.setImageResource(drawableId);
        exceptTv.setText(exceptStr);
        swipeRfl.setEnabled(false);//出现错误之后,将设定无法下拉,运用点击图片进行刷新
    }

    /**
     * drawableId 正在加载提示图片
     * exceptStr 正在加载提示语
     */
    public void customLoadView(String exceptStr) {
        recyclerView.setVisibility(View.INVISIBLE);
        mLoadingView.setVisibility(View.VISIBLE);
        mExceptView.setVisibility(View.INVISIBLE);
        loadingTv.setText(exceptStr);
        swipeRfl.setEnabled(false);
    }

    public void scrollToTop() {
        recyclerView.scrollToPosition(0);
    }

    public void setAdapter(CommonAdapter adapter) {
        if (adapter != null) {
            this.mAdapter = adapter;
            if (canMore) {//是否可以加载更多
                mLoadMoreWrapper = new LoadMoreWrapper(mAdapter);
                mLoadMoreWrapper.setLoadMoreView(R.layout.default_loading);
                mLoadMoreWrapper.setOnLoadMoreListener(new LoadMoreWrapper.OnLoadMoreListener() {
                    @Override
                    public void onLoadMoreRequested() {
                        /**
                         * 无论水平还是垂直
                         */
                        if (hasMore && !isLoadMore && !isRefresh && canMore) {
                            isLoadMore = true;
                            loadMore();
                        }
                    }
                });

                recyclerView.setAdapter(mLoadMoreWrapper);
            } else {
                recyclerView.setAdapter(mAdapter);
            }

            mAdapter.setOnItemClickListener(new CommonAdapter.OnItemClickListener() {
                @Override
                public void onItemClick(View view, RecyclerView.ViewHolder holder, int position) {
                    if (itemClickListener != null)
                        itemClickListener.onClick(view, holder, position);
                }

                @Override
                public boolean onItemLongClick(View view, RecyclerView.ViewHolder holder, int position) {
                    if (itemClickListener != null)
                        itemClickListener.onLongClick(view, holder, position);
                    return true;
                }
            });
        }
    }


    public void setHasMore(boolean enable) {
        this.hasMore = enable;
        mLoadMoreWrapper.setFootCanLoad(hasMore);
    }

    public boolean isHasMore() {
        return hasMore;
    }

    public boolean isCanMore() {
        return canMore;
    }

    public void setCanMore(boolean canMore) {
        this.canMore = canMore;
    }

    public void setPullRefreshEnable(boolean enable) {
        isCanRefresh = enable;
        swipeRfl.setEnabled(enable);
    }

    public boolean getPullRefreshEnable() {
        return swipeRfl.isEnabled();
    }

    public void loadMore() {
        if (mRefreshLoadMoreListner != null && hasMore && canMore) {
            mRefreshLoadMoreListner.onLoadMore();
        }
    }

    /**
     * 加载更多完毕,为防止频繁网络请求,isLoadMore为false才可再次请求更多数据
     */
    public void setLoadMoreCompleted() {
        isLoadMore = false;
    }

    public void stopRefresh() {
        isRefresh = false;
        swipeRfl.setRefreshing(false);
        if (isCanRefresh) swipeRfl.setEnabled(true);
    }

    public void setRefreshLoadMoreListener(RefreshLoadMoreListener listener) {
        mRefreshLoadMoreListner = listener;
    }

    public void setOnItemClickListener(ItemClickListener listener) {
        itemClickListener = listener;
    }

    /**
     * 刷新动作,用于请求网络数据
     */
    public void refresh() {
        swipeRfl.setRefreshing(true);
        //recyclerView.setVisibility(View.VISIBLE);
        mExceptView.setVisibility(View.INVISIBLE);
        if (mRefreshLoadMoreListner != null) {
            mRefreshLoadMoreListner.onRefresh();
        }
    }

    public void notifyDataSetChanged() {
        //firstload布局只能出现一次,所以这里判断如果显示,就隐藏
        if (mLoadingView.getVisibility() == View.VISIBLE) {
            recyclerView.setVisibility(View.VISIBLE);
            mExceptView.setVisibility(View.INVISIBLE);
            mLoadingView.setVisibility(View.INVISIBLE);
        }
        if (mLoadMoreWrapper != null)
            mLoadMoreWrapper.notifyDataSetChanged();
        else
            mAdapter.notifyDataSetChanged();
    }

    /**
     * 第一次自动加载,不与无数据用同样布局是因为,这里要有动画效果,所以单独一个布局
     */
    public void firstLoadingView(String exceptStr) {
        customLoadView(exceptStr);
        isRefresh = true;
        if (mRefreshLoadMoreListner != null) {
            mRefreshLoadMoreListner.onRefresh();
        }
    }

    /**
     * 获取刷新数据以后的处理
     *
     * @param actAllList
     * @param tmp
     */
    public void setDateRefresh(ArrayList<T> actAllList, ArrayList<T> tmp) {
        actAllList.clear();
        stopRefresh();//如果刷新则停止刷新
        if (tmp.isEmpty()) {
            customExceptView(R.drawable.no_data, "这里空空如也");
            setHasMore(false);
        } else {
            recyclerView.setVisibility(View.VISIBLE);
            setHasMore(true);
            actAllList.addAll(tmp);
        }
        notifyDataSetChanged();//刷新完毕
    }

    /**
     * 获取加载更多数据的处理
     *
     * @param actAllList
     * @param tmpLoadmore
     */
    public void setDateLoadMore(ArrayList<T> actAllList, ArrayList<T> tmpLoadmore) {
        if (tmpLoadmore.isEmpty()) {
            setHasMore(false);//如果没有更多数据则设置不可加载更多
            setLoadMoreCompleted();//加载完毕
            stopRefresh();//如果刷新则停止刷新
            return;
        }
        setHasMore(true);
        actAllList.addAll(tmpLoadmore);
        setLoadMoreCompleted();//加载完毕
        notifyDataSetChanged();//加载更多完毕
        stopRefresh();//如果刷新则停止刷新
    }

    public void setLayoutManager(RecyclerView.LayoutManager layoutManager) {
        recyclerView.setLayoutManager(layoutManager);
    }

    /**
     * 下拉刷新和自动加载监听
     */
    public interface RefreshLoadMoreListener {
        public void onRefresh();

        public void onLoadMore();
    }

    public interface ItemClickListener {
        public void onClick(View view, RecyclerView.ViewHolder holder, int position);

        public void onLongClick(View view, RecyclerView.ViewHolder holder, int position);
    }

}
           

6.具体用法

public class MainActivity extends BaseActivity implements
        MyRecycleView.RefreshLoadMoreListener {

    @Override
    protected int getContentView() {
        return R.layout.activity_main;
    }
    private MyRecycleView prrv;
    private int page = 1;
    private int num = 15;//测试数据的总数量
    private final static int PAGESIZE = 10;
    private CommonAdapter<ActivityBean> mAdapter;
    /**
     * 全部活动数据源
     */
    private ArrayList<ActivityBean> actAllList = new ArrayList<ActivityBean>();
    private boolean isFirstIn = true;//是否第一次加载

    @Override
    protected void afterView() {
        setTitle("下拉刷新demo");
        prrv = (MyRecycleView) findViewById(R.id.prrv);//绑定组合控件自定义的myrecycleview
        initAdapter();//初始化适配器
        prrv.setRefreshLoadMoreListener(this);//下拉上拉加载更多监听
        //prrv.setPullRefreshEnable(false);//禁用刷新
        //prrv.setCanMore(false);//禁用加载更多用在setAdapter()之前

        //设置布局管理
        //recyclerView.setLayoutManager();
        //recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
        //LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
        //GridLayoutManager layoutManager= new GridLayoutManager(this, 2);
        prrv.setLayoutManager(layoutManager);
        prrv.setAdapter(mAdapter);
        //条目监听
        prrv.setOnItemClickListener(new MyRecycleView.ItemClickListener() {
            @Override
            public void onClick(View view, RecyclerView.ViewHolder holder, int position) {
                Toast.makeText(MainActivity.this, "click-pos = " + position, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onLongClick(View view, RecyclerView.ViewHolder holder, int position) {
                Toast.makeText(MainActivity.this, "longclick-pos = " + position, Toast.LENGTH_SHORT).show();
            }
        });

    }

    /**
     * 初始化适配器
     */
    private void initAdapter() {
        mAdapter = new CommonAdapter<ActivityBean>(this, R.layout.fragment_discover_cardview_item, actAllList) {

            @Override
            protected void convert(ViewHolder holder, ActivityBean a, int position) {
                holder.setText(R.id.activity_title, a.getActTitile());
                /*holder.setText(R.id.activity_date, Utils.longtimeToDayDate(a
                        .getStartDate())
                        + "-"
                        + Utils.longtimeToDayDate(a.getEndDate()));*/
                holder.setText(R.id.activity_date, a.getUrl());

            }
        };


    }

    /**
     * 首次进入刷新
     */
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        // 第一次进入自动刷新
        if (isFirstIn) {
            prrv.firstLoadingView("数据加载中");
            isFirstIn = false;
        }

    }

    /**
     * 加载分页数据
     */
    public ArrayList<ActivityBean> loadNetDatas() {
        ArrayList<ActivityBean> tmp = new ArrayList<ActivityBean>();
        int m = num < PAGESIZE ? num : PAGESIZE;
        for (int i = 0; i < m; i++) {
            ActivityBean ab = new ActivityBean();
            ab.setActId(i * 10 + "");
            if (i % 3 == 0)
                ab.setActTitile("下拉刷新自动加载");
            else {
                ab.setActTitile("下拉刷新自动加载的recyclviewActivity");
            }
            ab.setCollected(false);
            ab.setCollectNum(i);
            ab.setEndDate(1428881600);
            ab.setImgUrl("");
            ab.setStartDate(1428681600);
            ab.setTop(false);
            if (i % 2 == 0)
                ab.setUrl("下拉刷新自动加载");
            else {
                ab.setUrl("下拉刷新自动加载的recyclviewActivity");
            }

            tmp.add(ab);
            num--;
        }
        return tmp;
    }

    @Override
    public void onRefresh() {
        num = 13;
        page = 1;
        mHandler.sendEmptyMessageDelayed(0, 2000);
        System.out.println("onRefresh");
    }

    @Override
    public void onLoadMore() {
        // TODO Auto-generated method stub
        page++;
        mHandler.sendEmptyMessageDelayed(1, 2000);
        System.out.println("onLoadMore");
    }

    private Handler mHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
                case 0://处理刷新的数据
                    ArrayList<ActivityBean> tmp = loadNetDatas();
                    prrv.setDateRefresh(actAllList, tmp);
                    ToastUtil.ToastCenter(MainActivity.this, "刷新完成");
                    break;
                case 1:// 处理加载更多的数据
                    ArrayList<ActivityBean> tmpLoadmore = loadNetDatas();
                    prrv.setDateLoadMore(actAllList, tmpLoadmore);
                    break;
            }
        }
    };


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_delete) {
            actAllList.clear();
            prrv.notifyDataSetChanged();
            page = 1;
            prrv.customExceptView(R.drawable.no_data, "这里空空如也");
            return true;
        }

        if (id == R.id.action_refreshable) {
            if (prrv.getPullRefreshEnable()) {
                prrv.setPullRefreshEnable(!prrv.getPullRefreshEnable());
            } else {
                prrv.setPullRefreshEnable(!prrv.getPullRefreshEnable());
            }
            return true;
        }
        if (id == R.id.action_loadmoreable) {
            if (prrv.isHasMore()) {
                prrv.setHasMore(!prrv.isHasMore());
            } else {
                prrv.setHasMore(!prrv.isHasMore());
            }
            return true;
        }
        if (id == R.id.action_stoprefresh) {
            prrv.stopRefresh();
            return true;
        }
        if (id == R.id.action_scrollToTop) {
            prrv.scrollToTop();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
           

三.demo下载地址

github

csdn