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

来源:互联网 发布:阿里云矢量图标库 编辑:程序博客网 时间:2024/05/21 03:17

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

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

1.第一进入页面的效果图

第一进入页面的效果图

2.数据为空的效果图

数据为空时

3.下拉刷新的效果

下拉刷新效果图

4.加载更多时效果

加载更多时效果图

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

加载更多时效果

二.代码放送

自定义一个控件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


0 0