Skip to content
景彬 edited this page Nov 24, 2019 · 39 revisions

概述

ByRecyclerView是一个用来处理App中列表展示的框架。它结合了优化过的RecyclerView多种BaseRecyclerViewAdapter,最大的优点在于两者可以分开使用可自定义刷新头部可自定义加载更多不足第一屏上拉才加载更多可结合SwipeRefreshLayout或其他刷新控件等。

特性

  • 1.支持 下拉刷新、加载更多
  • 2.可随意切换 自带下拉刷新布局 / SwipeRefreshLayout
  • 3.加载更多机制:手动上拉才执行加载更多
  • 4.可设置自定义 下拉刷新布局 和 加载更多布局
  • 5.添加/移除 HeaderView、FooterView
  • 6.设置空布局 EmptyView
  • 7.添加item的点击/长按事件
  • 8.优化过的BaseAdapter (RecyclerView / ListView),减少大量代码
  • 9.Adapter结合DataBinding使用 (RecyclerView / ListView)
  • 10.可添加万能分隔线(LinearLayout / GridLayout / StaggeredGridLayout)
  • 11.默认使用AndoridX,且支持Support

主要类介绍

ByRecyclerView

  • addHeaderView/addFooterView
  • setEmptyView
  • 设置下拉刷新
  • 设置加载更多

Adapter

  • BaseByRecyclerViewAdapter - 万能适配器
  • BaseRecyclerAdapter - 单个item类型适配器
  • BaseBindingAdapter - 集合DataBinding的单个item类型适配器

1 引入及极速设置

1.1 引入

先在 build.gradle 的 repositories 添加

allprojects {
	repositories {
		...
		maven { url "https://jitpack.io" }
	}
}

然后在dependencies添加

dependencies {
	implementation 'com.github.youlookwhat:ByRecyclerView:1.0.9'         // 默认AndroidX版本
	implementation "com.github.youlookwhat:ByRecyclerView:1.0.9-support" // support版本引入
}

1.2 极速设置

  • 加入布局
<me.jingbin.library.ByRecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:layoutManager="LinearLayoutManager"
    tools:listitem="@layout/item_home" />
  • 使用BaseRecyclerAdapter
public class OneTypeAdapter extends BaseRecyclerAdapter<String> {

    public OneTypeAdapter(List<String> data) {
        super(R.layout.item_main, data);
    }

    @Override
    protected void bindView(BaseByViewHolder<String> holder, String bean, int position) {
        holder.setText(R.id.view_bottom, bean);
    }
}

mAdapter.setNewData(list);   // 设置第一页数据
  • 加载更多监听
mRecyclerView.setOnLoadMoreListener(new ByRecyclerView.OnLoadMoreListener() {
    @Override
    public void onLoadMore() {
         mAdapter.addData(list);            // 设置及刷新数据
         mRecyclerView.loadMoreComplete();  // 加载更多完成 
         mRecyclerView.loadMoreEnd();       // 没有更多内容了
         mRecyclerView.loadMoreFail();      // 加载更多失败
    }
});

2 ByRecyclerView

集合下拉刷新、加载更多、添加/移除HeaderView或FooterView、设置EmptyView等,也可以使用自己定义的BaseAdapter

2.1 使用自带下拉刷新

默认关闭,设置监听后标明启用。也可手动再设置关闭。

mRecyclerView.setOnRefreshListener(new ByRecyclerView.OnRefreshListener() {
    @Override
    public void onRefresh() {
        mAdapter.setNewData(list);  // 设置及刷新数据
    }
});

// 需要在设置监听后设置,设置监听会开启自动刷新
mRecyclerView.setRefreshEnabled(false); 

mRecyclerView.setRefreshing(true);  // 手动启动刷新
mRecyclerView.setRefreshing(false); // 取消刷新重置参数,包括加载更多的参数

2.2 使用加载更多

设置监听即表示开启加载更多。不设置默认不开启。

// 想要使用加载更多,必须设置监听或将加载更多开关打开。
// 只打开开关不设置加载更多监听,多出现在只想在列表最后设置`没有更多数据了`的布局。
mRecyclerView.setLoadMoreEnabled(true);

mRecyclerView.setOnLoadMoreListener(new ByRecyclerView.OnLoadMoreListener() {
    @Override
    public void onLoadMore() {
         mAdapter.addData(list);            // 设置及刷新数据(对应adapter方法)
         mRecyclerView.loadMoreComplete();  // 加载更多完成 
         mRecyclerView.loadMoreEnd();       // 没有更多内容了
         mRecyclerView.loadMoreFail();      // 加载更多失败(点击或再次上拉都会再次调用加载更多接口)
    }
}, delayMillis);// delayMillis: 延迟多少毫秒调用接口

2.3 添加item点击事件

mRecyclerView.setOnItemClickListener(new ByRecyclerView.OnItemClickListener() {
    @Override
    public void onClick(View v, int position) {
        DataItemBean itemData = mAdapter.getItemData(position);// 通过adapter获取对应position的数据
    }
});

2.4 添加item长按事件

mRecyclerView.setOnItemLongClickListener(new ByRecyclerView.OnItemLongClickListener() {
    @Override
    public boolean onLongClick(View v, int position) {
        return false;
    }
});

2.5 addHeaderView(多type)

每一个headerView都将对应一个viewType,这将可以通过headerView实现锚点的效果。可传入View或对应布局layout

// add
recyclerView.addHeaderView(getView() / layoutId);
// remove
recyclerView.removeHeaderView(getView() / layoutId));
// removeAll
recyclerView.removeAllHeaderView();

// 不显示headerView,调用后需要刷新adapter
recyclerView.setHeaderViewEnabled(false);

2.6 addFooterView

多个footerView只是单一的viewType;可传入View或对应布局layout。

// add
recyclerView.addFooterView(getView() / layoutId));
// remove
recyclerView.removeFooterView(getView() / layoutId));
// removeAll
recyclerView.removeAllFooterView();

// 不显示footerView,调用后需要刷新adapter
recyclerView.setFootViewEnabled(false);

2.7 setEmptyView(空布局、加载中布局、错误布局)

loadingView / emptyView / errorView 只会存在一个,所以调用这个方法即可

recyclerView.setEmptyView(getView() / layoutId);

// 不显示emptyView,调用后需要刷新adapter
recyclerView.setEmptyViewEnabled(false);

2.8 设置不满一屏不加载

recyclerView.setNotFullScreenNoLoadMore();

2.9 设置加载更多布局底部padding

// 为了底部透明显示
recyclerView.setLoadingMoreBottomHeight(50);

2.10 自定义下拉刷新 或 加载更多布局

recyclerView.setLoadingMoreView(new NeteaseLoadMoreView(this));
recyclerView.setRefreshHeaderView(new NeteaseRefreshHeaderView(this));

----待续