youlookwhat/ByRecyclerView
🔥 RecyclerView 下拉刷新、上拉松手/自动加载更多、item点击/长按、item局部刷新、头布局/尾布局/状态布局、万能分割线、Skeleton骨架图、极简adapter、嵌套滑动置顶
📋 Changes
- Sets whether the StateView is displayed
- later need setNewData() or notifyDataSetChanged();
- @param isRemoveRefresh Whether to remove StateView immediately
ListView的BaseListAdapter 优化和新增 ```setNewData()``` ``` public void setNewData(List<T> data) { this.mData = data == null ? new ArrayList<T>() : data; notifyDataSetChanged(); } ```
adapter里新增: ``` setPageEmptyView(View emptyView) setPageData(boolean isFirstPage, List<T> data) ``` 在adapter里可单独设置emptyView,然后再使用`setPageData`
fix removeData() https://github.com/youlookwhat/ByRecyclerView/commit/ad5e59bd07e5066adb04d4e0fa33d7a2a77c57f2
fix 优化判断是否能加载更多逻辑 ``` public boolean isLoadMoreEnabled() { return mLoadMoreListener != null && (mLoadMoreEnabledStatus == 1 || mLoadMoreEnabledStatus == 2); } ```
📋 Changes
- 设置数据 和 处理空视图。
- 如果想列表上方状态视图(StateView),不能使用这个方法。
- @param isFirstPage 是否是第一页
- @param data 需要设置的数据
- @param emptyView 空视图的View
📋 Changes
- 内存释放和临界状态的处理
fix item 悬浮置顶加入下拉刷新 ,悬浮错位 https://github.com/youlookwhat/ByRecyclerView/issues/57 相关修改:https://github.com/youlookwhat/ByRecyclerView/commit/f9ce5b1cb34d801e107c4680a059153b98dc4c0f 感谢提出者 [PYJVIP](https://github.com/PYJVIP),还给了解决方案。 ```java if (StickyHeaderHandler.TYPE_STICKY_VIEW == mBaseAdapter.getItemViewType(i)) { int customTopItemViewCount = mBaseAdapter.getCustomTopItemViewCount(); mHeaderPositions.add(i + customTopItemViewCount); } ```
fix possible IndexOutOfBoundsException https://github.com/youlookwhat/ByRecyclerView/issues/52 修复可能发生的角标越界异常 ```java if (mData != null && mData.size() > 0 && position < mData.size()) { return mData.get(position); } ``` 更新JitPack配置
📋 Changes
- 设置加载更多监听
- @param isAutoLoadMore 是否自动加载
- @param preLoadNumber 自动加载时,默认滑动到倒数第[preLoadNumber]条数据加载,默认1
- @param listener 监听器
- @param delayMillis 延迟多少毫秒执行加载更多
[完善] 使用`refreshNotifyItemChanged(position, payload);`不继承`bindViewPayloads`时,默认使用`bindView`处理。 ```java // 设置要局部刷新的position及payload adapter.refreshNotifyItemChanged(position, PayloadAdapter.PAYLOAD_COLLECT); // adapter里额外再继承 bindViewPayloads 方法 @Override protected void bindViewPayloads(@NonNull BaseBindingHolder holder, @NonNull DataItemBean bean, @NonNull ItemPayloadBinding binding, int position, @NonNull List<Object> payloads) { // 删除掉这一行,自己处理,不走bindView() // super.bindViewPayloads(holder, bean, binding, position, payloads); for (Object p : payloads) { int code = (int) p; switch (code) { case PAYLOAD_ZAN: binding.tvZan.setText(bean.getIsZan() == 1 ? "已赞" : "点赞"); break; case PAYLOAD_COLLECT: binding.tvCollect.setText(bean.getIsCollect() == 1 ? "已收藏" : "收藏"); break; default: break; } } } ```
新增 item局部刷新 ```java // 设置要局部刷新的position及payload adapter.refreshNotifyItemChanged(position, PayloadAdapter.PAYLOAD_COLLECT); // adapter里额外再继承 bindViewPayloads 方法 @Override protected void bindViewPayloads(@NonNull BaseBindingHolder holder, @NonNull DataItemBean bean, @NonNull ItemPayloadBinding binding, int position, @NonNull List<Object> payloads) { for (Object p : payloads) { int code = (int) p; switch (code) { case PAYLOAD_ZAN: binding.tvZan.setText(bean.getIsZan() == 1 ? "已赞" : "点赞"); break; case PAYLOAD_COLLECT: binding.tvCollect.setText(bean.getIsCollect() == 1 ? "已收藏" : "收藏"); break; default: break; } } } ```
📋 Changes
- 增加处理 横向宫格分割线
📋 Changes
- 解决setStateView可能存在的错误
- 优化在ViewPage2里使用时,使用下拉刷新的处理逻辑
📋 Changes
- 处理在ViewPager2中下拉刷新时左右移动中断的问题,可setDispatchTouch(false)取消处理
- 增加setStateViewEnabled(boolean stateViewEnabled, boolean isRemoveRefresh),状态布局可直接remove
📋 Changes
- 优化`OnItemFilterClickListener`和`OnItemChildFilterClickListener `代码
- 更改加载更多View的进度条默认颜色,默认取`colorAccent`
📋 Changes
- `OnItemFilterClickListener` item防止重复点击
- `OnItemChildFilterClickListener` item子view防止重复点击
fix: ```java if (!adapter.hasObservers()) { adapter.registerAdapterDataObserver(mDataObserver); } ```
📋 Changes
- 修改加载更多逻辑:最后一条显示松开手指即加载
📋 Changes
- 修改加载更多逻辑:最后一条显示松开手指即加载
📋 Changes
- fix GridSpaceItemDecoration setSpanSizeLookup会发生错乱 https://github.com/youlookwhat/ByRecyclerView/issues/13
📋 Changes
- fix GridSpaceItemDecoration setSpanSizeLookup会发生错乱 https://github.com/youlookwhat/ByRecyclerView/issues/13
📋 Changes
- 设置item骨架图:通过额外setAdapter实现 【在之前 不能 setAdapter()】
- 配置方法:
- adapter 必须!
- load item骨架图 默认 layout_by_default_item_skeleton
- shimmer 是否有微光动画 默认 true
- angle 微光角度 默认 20
- frozen 是否不可滑动 默认 true不可滑动
- color 微光的颜色 默认 R.color.by_skeleton_shimmer_color
- + 9 more
📋 Changes
- 设置item骨架图:通过额外setAdapter实现 【在之前 不能 setAdapter()】
- 配置方法:
- adapter 必须!
- load item骨架图 默认 layout_by_default_item_skeleton
- shimmer 是否有微光动画 默认 true
- angle 微光角度 默认 20
- frozen 是否不可滑动 默认 true不可滑动
- color 微光的颜色 默认 R.color.by_skeleton_shimmer_color
- + 9 more
Support版本: 增加悬浮item设置 1、使用StickyLinearLayoutManager,传入adapter ```java StickyLinearLayoutManager layoutManager = new StickyLinearLayoutManager(getContext(), mAdapter); ``` 2、在adapter里,将悬浮的item的ItemViewType设置为StickyHeaderHandler.TYPE_STICKY_VIEW ```java @Override public int getItemViewType(int position) { if (0 <= position && position < getData().size()) { DataItemBean itemData = getItemData(position); if ("title".equals(itemData.getType())) { return StickyHeaderHandler.TYPE_STICKY_VIEW; } else { return 2; } } return 2; } ``` > 也可以使用StickyGridLayoutManager,只需将最后一个参数传入 adapter 即可 注意:使用置顶item时,不能使用自带的下拉刷新。
📋 Changes
- 增加悬浮item设置
📋 Changes
- 优化destroy的操作
📋 Changes
- 优化destroy的操作
Support 版本: [修复] 添加瀑布流分割线的问题 [修复] 在指定位置添加一组数据的问题 [优化] 代码优化
AndroidX 版本: [修复] 添加瀑布流分割线的问题 [修复] 在指定位置添加一组数据的问题 [新增] 使用多类型列表代码示例 [新增] 使用自定义横向加载更多布局示例 [优化] 代码优化
