Android之ListViewAndroid项目源码

基于RecyclerView开发一个支持下拉刷新 上拉加载

2018-04-05  本文已影响118人  Android开发小白

ZXQRecyclerView简介

该组件是根据XRecyclerView优化而来 修复了其由于动画引起的内存泄漏 添加了跟多可自定义的接口。

效果图

下拉刷新 上拉加载更多

使用方法

1.Gradle 添加

compile 'com.zhuxiaoqing.zxqrecyclerviewlibrary:ZXQRecyclerView:1.0.0'

2.布局文件中

<com.zhuxiaoqing.zxqrecyclerviewlibrary.view.ZXQRecyclerView
        android:id="@+id/dmo_zxq_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></com.zhuxiaoqing.zxqrecyclerviewlibrary.view.ZXQRecyclerView>

3.java代码中

        zxqRecyclerView = (ZXQRecyclerView) findViewById(R.id.dmo_zxq_view);//得到控件
        dmoAdapter = new DmoAdapter();//适配器
        zxqRecyclerView.setLayoutManager(new LinearLayoutManager(this));//添加布局管理器
        dom_header_view=LayoutInflater.from(this).inflate(R.layout.dom_head_view,zxqRecyclerView,false);//这里是头布局
        zxqRecyclerView.setLoadingListener(this);//监听回调函数
        //设置加载跟多文字
        zxqRecyclerView.setFootViewText("全力加载中", "宝宝已经到底了");
        //设置头布局
        zxqRecyclerView.addHeaderView(dom_header_view);
        zxqRecyclerView.setAdapter(dmoAdapter);

Activty 实现 ZXQRecyclerView.LoadingListener接口

刷新回调

 @Override
    public void onRefresh() {
        zxqRecyclerView.postDelayed(new Runnable() {
            @Override
            public void run() {
                zxqRecyclerView.refreshComplete();//刷新完成
                dmoAdapter.setCount(10);
                dmoAdapter.notifyDataSetChanged();
                zxqRecyclerView.setNoMore(false);
            }
        }, 2000);
    }

下拉加载回调

   @Override
    public void onLoadMore() {
        if(dmoAdapter.getCount()>20){
            zxqRecyclerView.setNoMore(true);
        }else {
            zxqRecyclerView.postDelayed(new Runnable() {
                @Override
                public void run() {
                    zxqRecyclerView.loadMoreComplete();//下拉刷新完成
                    dmoAdapter.addCount();
                    dmoAdapter.notifyDataSetChanged();


                }
            }, 2000);
        }

    }

DMO适配器

  public class DmoAdapter extends RecyclerView.Adapter<DmoAdapter.ViewHolder> {

        private int count = 10;

        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.dmo_item_view, parent, false));
        }

        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {
            holder.onBindViewHolder(position);
        }

        public class ViewHolder extends RecyclerView.ViewHolder {
            private TextView item_name_view;
            private String leable="第%s个列表";

            public ViewHolder(View itemView) {
                super(itemView);
                item_name_view= (TextView) itemView.findViewById(R.id.item_name_view);
            }

            public void onBindViewHolder(int position){
                item_name_view.setText(String.format(leable,position+1));
            }
        }


        @Override
        public int getItemCount() {
            return count;
        }

        private void addCount() {
            count += 10;
        }

        public int getCount() {
            return count;
        }

        public void setCount(int count) {
            this.count = count;
        }
    }

其他方法

1 设置加载中文字和没有更多文字

 zxqRecyclerView.setFootViewText("全力加载中", "宝宝已经到底了");

2 设置刷新头文字颜色

 setTopTextColor(int color)

3 是否显示刷新时间

setShowTime(boolean showTime)

4 设置加载更多字体和动画颜色

setLoadMoerColor(int color)

5 设置没有更多字体颜色

setNoMoreTextViewColor(int color)

注意事项

1 下标问题

因为下拉刷新本质是一个Item,添加的头布局也是以一个Item添加进去的。所以在具体需要根据下标对实际Item做事情的时候需要注意

1.1例如删除动画

//例子 伪代码
 orderBeans.remove(position);
 //这里是没有添加头布局的情况下 需要将下标+1(下拉刷新占一个item)
 adapter.notifyItemRemoved(position+1);
 adapter.notifyItemRangeChanged(position+1, orderBeans.size()-position);
 

1.2 刷新指定item

 //这里是没有添加头布局的情况下 需要将下标+1(下拉刷新占一个item)
adapter.notifyItemChanged(position + 1, AllCode.VIDEO_ITEM_UP);

1.3 findViewHolderForAdapterPosition

//伪代码 下标需要加上+1(没有添加头部局时 如果添加了头布局 则需要根据添加的头布局数量来对应修改加的值)
(NewSelfTimerAdapterForTwo.ViewHolder) selftimer_xview.findViewHolderForAdapterPosition(position + 1);

GitHub地址

https://github.com/qq516633632/ZXQRecyclerView

XRecyclerView地址

https://github.com/XRecyclerView/XRecyclerView

上一篇下一篇

猜你喜欢

热点阅读