-
Notifications
You must be signed in to change notification settings - Fork 141
Home
景彬 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
- addHeaderView/addFooterView
- setEmptyView
- 设置下拉刷新
- 设置加载更多
- BaseByRecyclerViewAdapter - 万能适配器
- BaseRecyclerAdapter - 单个item类型适配器
- BaseBindingAdapter - 集合DataBinding的单个item类型适配器
先在 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版本引入
}
- 加入布局
<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(); // 加载更多失败
}
});
集合下拉刷新、加载更多、添加/移除HeaderView或FooterView、设置EmptyView等,也可以使用自己定义的BaseAdapter
默认关闭,设置监听后标明启用。也可手动再设置关闭。
mRecyclerView.setOnRefreshListener(new ByRecyclerView.OnRefreshListener() {
@Override
public void onRefresh() {
mAdapter.setNewData(list); // 设置及刷新数据
}
});
// 需要在设置监听后设置,设置监听会开启自动刷新
mRecyclerView.setRefreshEnabled(false);
mRecyclerView.setRefreshing(true); // 手动启动刷新
mRecyclerView.setRefreshing(false); // 取消刷新重置参数,包括加载更多的参数
设置监听即表示开启加载更多。不设置默认不开启。
// 想要使用加载更多,必须设置监听或将加载更多开关打开。
// 只打开开关不设置加载更多监听,多出现在只想在列表最后设置`没有更多数据了`的布局。
mRecyclerView.setLoadMoreEnabled(true);
mRecyclerView.setOnLoadMoreListener(new ByRecyclerView.OnLoadMoreListener() {
@Override
public void onLoadMore() {
mAdapter.addData(list); // 设置及刷新数据(对应adapter方法)
mRecyclerView.loadMoreComplete(); // 加载更多完成
mRecyclerView.loadMoreEnd(); // 没有更多内容了
mRecyclerView.loadMoreFail(); // 加载更多失败(点击或再次上拉都会再次调用加载更多接口)
}
}, delayMillis);// delayMillis: 延迟多少毫秒调用接口
mRecyclerView.setOnItemClickListener(new ByRecyclerView.OnItemClickListener() {
@Override
public void onClick(View v, int position) {
DataItemBean itemData = mAdapter.getItemData(position);// 通过adapter获取对应position的数据
}
});
mRecyclerView.setOnItemLongClickListener(new ByRecyclerView.OnItemLongClickListener() {
@Override
public boolean onLongClick(View v, int position) {
return false;
}
});
每一个headerView都将对应一个viewType,这将可以通过headerView实现锚点的效果。可传入View或对应布局layout
// add
recyclerView.addHeaderView(getView() / layoutId);
// remove
recyclerView.removeHeaderView(getView() / layoutId));
// removeAll
recyclerView.removeAllHeaderView();
// 不显示headerView,调用后需要刷新adapter
recyclerView.setHeaderViewEnabled(false);
多个footerView只是单一的viewType;可传入View或对应布局layout。
// add
recyclerView.addFooterView(getView() / layoutId));
// remove
recyclerView.removeFooterView(getView() / layoutId));
// removeAll
recyclerView.removeAllFooterView();
// 不显示footerView,调用后需要刷新adapter
recyclerView.setFootViewEnabled(false);
loadingView / emptyView / errorView 只会存在一个,所以调用这个方法即可
recyclerView.setEmptyView(getView() / layoutId);
// 不显示emptyView,调用后需要刷新adapter
recyclerView.setEmptyViewEnabled(false);
recyclerView.setNotFullScreenNoLoadMore();
// 为了底部透明显示
recyclerView.setLoadingMoreBottomHeight(50);
recyclerView.setLoadingMoreView(new NeteaseLoadMoreView(this));
recyclerView.setRefreshHeaderView(new NeteaseRefreshHeaderView(this));
----待续
1 引入及极速设置
- 2.1 使用自带下拉刷新
- 2.2 使用加载更多
- 2.3 添加item点击事件
- 2.4 添加item长按事件
- 2.5 addHeaderView
- 2.6 addFooterView
- 2.7 setStateView
- 2.8 不满一屏不加载
- 2.9 加载更多底部间距
- 2.10 自定义下拉刷新
- 2.11 自定义加载更多
- 2.12 子View点击事件
- 2.13 子View长按事件
- 2.14 item 局部刷新
3 Adapter
- 3.1 单类型列表
- 3.2 单类型列表(databinding)
- 3.3 多类型列表实现