Skip to content

XRecyclerViewAdapter详解

Spring edited this page Aug 16, 2017 · 4 revisions

一个用于简化RecyclerView Adapter的开发库,包含添加Header,Footer,加载更多,加载失败,加载到底和支持多种布局,分割线工具类。 我们这里封装的adapter为了保证使用者的可定制性,并没有去改动去继承RecyclerView,而是通过改动adapter的方式来实现, 使用者不需要为了本框架没有某个功能而纠结,你完全可以和其他自定义RecyclerView配合使用。

方法使用

  • 添加分割线
recyclerView.addItemDecoration(new DividerDecoration(Color.parseColor("#C4C4C4"),1));
  • 添加/移除header,footer
final View headerView = LayoutInflater.from(this).inflate(R.layout.header, recyclerView, false);
final View footerView = LayoutInflater.from(this).inflate(R.layout.footer, recyclerView, false);
adapter.addHeaderView(headerView);
adapter.addFooterView(footerView);
adapter.removeFooterView(footerView);
  • 点击事件
//点击事件
adapter.setOnItemClickListener(new XRecyclerViewAdapter.OnItemClickListener() {
   @Override
   public void onItemClick(View v, int position) {
                
   }
});
   
//开启加载更多功能,默认关闭    
adapter.isLoadMore(true);

//加载更多事件
adapter.setOnLoadMoreListener(new XRecyclerViewAdapter.OnLoadMoreListener() {
   @Override
   public void onRetry() {//加载失败,重新加载回调方法
               
   }

   @Override
   public void onLoadMore() {//加载更多回调方法

   }
});

recyclerView.setAdapter(adapter);

单一布局Adapter使用示例

 class TestAdapter extends XRecyclerViewAdapter<String> {

        public TestAdapter(RecyclerView recyclerView, List<String> datas) {
            super(recyclerView, datas, R.layout.dome_item);
        }

        @Override
        public void bindData(XViewHolder holder, String data, int position) {
            //方法一:
            holder.setText(R.id.text, data);
            //方法二:
            //TextView textView = holder.getView(R.id.text);
            //textView.setText(data);
        }
    }

多状态布局Adapter使用示例

public class News {
    /** 单图布局样式 */
    public static final int TYPE_SINGLE_PICTURE   = 0;
    /** 无图布局样式 */
    public static final int TYPE_NONE_PICTURE     = 1;

    private int newsType;
    private String title;
    private String imageUrl;
    private String author;
    private String time;
}
class MultiTypeAdapter extends XRecyclerViewAdapter<News> {

        public MultiTypeAdapter(@NonNull RecyclerView mRecyclerView, List<News> dataLists) {
            super(mRecyclerView, dataLists);
        }

        @Override
        public int getItemLayoutResId(News data, int position) {
            int layoutResId = -1;
            switch (data.getNewsType()){
                case News.TYPE_NONE_PICTURE:
                    layoutResId = R.layout.dome_item;
                    break;
                case News.TYPE_SINGLE_PICTURE:
                    layoutResId = R.layout.dome_image_item;
                    break;
            }
            return layoutResId;
        }

        @Override
        public void bindData(XViewHolder holder, News data, int position) {
            switch (data.getNewsType()){
                case News.TYPE_NONE_PICTURE:
                    holder.setText(R.id.text, data.getTitle());
                    break;
                case News.TYPE_SINGLE_PICTURE:
                    holder.setText(R.id.newTitle, data.getTitle())
                            .setText(R.id.newAuthor,data.getAuthor())
                            .setText(R.id.newTime,data.getTime())
                            .setImageUrl(R.id.newImage,data.getImageUrl(),new GlideCircleTransform(getContext()));
                    
                    break;
            }
        }
}

adapter方法列表

showLoadError();//显示加载错误
showLoadComplete();//没有更多数据了
isLoadMore(true);//开启加载更多功能,默认关闭   
addHeaderView(headerView);//添加header,可以添加多个
addFooterView(footerView);//添加footer,可以添加多个
removeFooterView(footerView);//移除footer
removeHeaderView(footerView);//移除header
getItemCount();//获取总item数量包括头尾
getDataCount();//获取数据item数量
getHeaderCount()//获取header数量
getFooterCount()//获取footer数量
setOnLoadMoreListener()设置加载更多监听
setOnItemClickListener()设置点击事件
setOnItemLongClickListener()设置长按事件
setDataLists(List<T> datas)//设置数据集合(清空以前的集合数据,在重新添加,不同于addAll是直接添加)
getItem(int position)//获取指定位置的数据
getDataLists()//获取数据集合
add(T data)//添加数据条目
add(int position, T data)//在指定位置添加数据条目
addAll(List<T> datas) //添加数据条目集合
addAll(int position,List<T> datas) //在指定位置添加数据条目集合
remove(int position)//删除指定索引数据条目
remove(T data)//删除指定数据条目
replace(int location, T newData) //替换指定索引的数据条目
replace(T oldData, T newData) //替换指定数据条目
move(int fromPosition, int toPosition)//交换两个数据条目的位置
clear() 清空