美文网首页AndroidAndroid UIAndroid学习
ARecyclerView,一个库搞定recyclerview

ARecyclerView,一个库搞定recyclerview

作者: droidlover | 来源:发表于2016-11-03 16:38 被阅读3773次

    ARecyclerView

    对RecyclerView的封装,功能强大、使用简单、扩展性强。该库主要分成三部分:RecyclerAdapterXRecyclerViewXRecyclerContentLayout
    欢迎star、fork,提出宝贵意见。

    xrecyclerview.gif

    使用

    • Gradle : compile 'cn.droidlover:XRecyclerView:1.0.0'
    • Github : ARecyclerView

    RecyclerAdapter

    RecyclerAdapter简化了Adapter的开发,封装了一些常用的逻辑,包括数据集合操作、接口监听RecyclerItemCallback可以满足99%的需求。

    使用示例

    public class TestRecAdapter extends RecyclerAdapter<TestRecAdapter.Item, TestRecAdapter.ViewHolder> {
    
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
          
        }
    
        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {
            
        }
    }
    

    XRecyclerView

    XRecyclerView是对RecyclerView的封装,其主要特性包括:

    • 一行代码添加、删除、修改Header或者Footer
    • 一行代码添加默认的上拉加载效果
    • 一行代码切换自定义上拉加载效果
    • 一行代码轻松添加LayoutManager
    • 一行代码添加divider
    • Adapter规范及封装RecyclerAdapter

    使用示例

    recyclerView.verticalLayoutManager(this)        //设置layoutManager
                .setAdapter(adapter);                   //设置Adapter
    recyclerView.horizontalDivider(R.color.x_red, R.dimen.divider_height);  //设置divider
    recyclerView.setOnRefreshAndLoadMoreListener(new XRecyclerView.OnRefreshAndLoadMoreListener() { //设置刷新和上拉加载监听
                @Override
                public void onRefresh() {
                    loadData(1);
                }
    
                @Override
                public void onLoadMore(int page) {
                    loadData(page);
                }
            });
    recyclerView.useDefLoadMoreView();      //使用默认的上拉刷新样式
    recyclerView.addHeaderView(headView);       //添加header
    recyclerView.addFooterView(footview);       //添加footer
    recyclerView.removeHeaderView(headview);    //删除header
    recyclerView.removeFooterView(footview);    //删除footer
    

    XRecyclerContentLayout

    XRecyclerContentLayout继承了QTContentLayout,可自定义Loading、Error、Empty、Content四种显示状态,满足了绝大部分需求.

    使用示例

    <cn.droidlover.xrecyclerview.XRecyclerContentLayout
            android:id="@+id/contentLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:recyclerBackgroundColor="#f5f5f5"
            app:recyclerScrollbarNone="true"
            app:recyclerScrollbarStyle="outsideOverlay" />
    
    contentLayout.loadingView(new LoadingView(this));
                 .errorView(new ErrorView(this));
                 .emptyView(new EmptyView(this));
    
    contentLayout.showLoading();
    contentLayout.showError();
    contentLayout.showEmpty();
    contentLayout.showContent();
    

    自定义实现XRecyclerContentLayout

    在XRecyclerContentLayout中内置了SwipeRefreshLayout下拉刷新样式,您也可以自定义实现XRecyclerContentLayout,只需实现XRecyclerView.StateCallback接口即可.

    public interface StateCallback {
            void notifyEmpty();     //数据为空
    
            void notifyContent();   //显示contentview
    
            void refreshState(boolean isRefresh);   //更新刷新状态
    
            void refreshEnabled(boolean isEnabled); //刷新是否可用
        }
    

    相关文章

      网友评论

      • 31fd1feec8a7:版主 为什么我设置recyclerView.useDefLoadMoreView();无效 而且有时候刷新的时候调用了加载更多的方法
      • 恒等式古怪: @Override
        public int getItemViewType(int position) {
        if (getDataCount() > 0) {
        if (position < getHeaderSize()) {
        return ITEM_TYPE_HEADER + position;
        }
        if (position < getHeaderSize() + getDataCount()) {
        return getMapClassInValue() + baseAdapter.getItemViewType(position - getHeaderSize());
        }
        return ITEM_TYPE_NORMAL + position - getHeaderSize() - getDataCount();
        } else {
        if (getHeaderSize() > 0 && position < getHeaderSize()) {
        return ITEM_TYPE_HEADER + position;
        }
        return ITEM_TYPE_NORMAL + position - getHeaderSize();
        }
        }


        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        int index = 0;
        if (viewType < ITEM_TYPE_HEADER + getHeaderSize()) {
        index = viewType + ITEM_TYPE_HEADER;
        return new AHeadFootViewHolder(headerViewList.get(index));
        }
        if (getDataCount() > 0 && viewType < ITEM_TYPE_NORMAL + getDataCount()
        || viewType <= ITEM_TYPE_NORMAL + getFooterSize()) {
        if (index < footerViewList.size()) {
        return new AHeadFootViewHolder(footerViewList.get(index));
        }
        }
        index = viewType - getMapClassInValue();
        return baseAdapter.onCreateViewHolder(parent, index);
        }


        这个type值这里判断逻辑有点模糊不清,还请大神指导一下
      • 恒等式古怪: 你好:
        那个XRecyclerAdapter中
        private Map<Class, Integer> adapterClassMap这个集合用意不是很清楚
      • 追风骚年:回家看
        droidlover:@追风骚年 :smiley:
      • 8f46d626e721:好
        droidlover:@大大大大张振 谢谢 :flushed:

      本文标题:ARecyclerView,一个库搞定recyclerview

      本文链接:https://www.haomeiwen.com/subject/yqfiuttx.html