登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 106|回复: 0

Android RecyclerViewHelper上拉加载更多/头尾布局/拖拽

[复制链接]

411

主题

414

帖子

8445

安币

手工艺人

发表于 2019-4-16 10:15:01 | 显示全部楼层 |阅读模式
如果对本篇文章感兴趣,请前往,原文地址:http://www.apkbus.com/blog-822715-79880.html

## 1.写在前面2019年的第一篇文章,分享一个自己写的开源项目,主要是对RecyclerView控件的一些常用功能封装, 包括(上拉加载更多、头尾布局、拖拽排序、侧滑删除、侧滑选择、万能分割线)。RecyclerViewHelper主要使用了装饰者模式对项目原有的Adapter进行功能扩展,不会影响项目的原有结构,集成和修改都非常方便,一起来看下。[GitHub传送门](https://github.com/alidili/RecyclerViewHelper)## 2.引入依赖库- 在项目根目录的build.gradle文件中加入如下代码:```allprojects {    repositories {        maven { url "https://jitpack.io" }    }}```- 在app根目录的buil.gradle文件中加入依赖:```dependencies {    implementation 'com.github.alidili:RecyclerViewHelper:1.0.0'}```**截止此篇文章发布时,最新版本为1.0.0,最新版本可在GitHub中查看。****RecyclerViewHelper中使用的RecyclerView版本如下:**```implementation "androidx.recyclerview:recyclerview:1.0.0"```## 3.上拉加载更多效果图:![Picture](//upload-images.jianshu.io/upload_images/3270074-ebba3b268ba6f0f7.gif)集成:```// CommonAdapter为项目原有AdapterCommonAdapter commonAdapter = new CommonAdapter(mDataList);mLoadMoreWrapper = new LoadMoreWrapper(commonAdapter);// 自定义加载布局customLoadingView();mRecyclerView.setLayoutManager(new LinearLayoutManager(this));mRecyclerView.setAdapter(mLoadMoreWrapper);// 设置上拉加载监听mRecyclerView.addOnScrollListener(new OnScrollListener() {    @Override    public void onLoadMore() {        // 设置数据正在加载状态,可自定义布局        mLoadMoreWrapper.setLoadStateNotify(mLoadMoreWrapper.LOADING);        if (mDataList.size() < 52) {            // 获取数据            // 设置数据加载完成状态,可自定义布局            mLoadMoreWrapper.setLoadStateNotify(mLoadMoreWrapper.LOADING_COMPLETE);        } else {            // 设置所有数据加载完成状态,可自定义布局            mLoadMoreWrapper.setLoadStateNotify(mLoadMoreWrapper.LOADING_END);        }    }});// 刷新数据需要使用外层AdaptermLoadMoreWrapper.notifyDataSetChanged();```自定义加载布局:```private void customLoadingView() {    // 正在加载布局    ProgressBar progressBar = new ProgressBar(this);    mLoadMoreWrapper.setLoadingView(progressBar);    // 所有数据加载完成布局    TextView textView = new TextView(this);    textView.setText("End");    mLoadMoreWrapper.setLoadingEndView(textView);    // 布局高度    mLoadMoreWrapper.setLoadingViewHeight(DensityUtils.dp2px(this, 50));}```## 4.头尾布局效果图:![Picture](//upload-images.jianshu.io/upload_images/3270074-c6204c7dbb6f5967.gif)集成:```// CommonAdapter为项目原有AdapterCommonAdapter commonAdapter = new CommonAdapter(mDataList);mHeaderAndFooterWrapper = new HeaderAndFooterWrapper(commonAdapter);// 添加头尾布局addHeaderAndFooterView();mRecyclerView.setLayoutManager(new LinearLayoutManager(this));mRecyclerView.setAdapter(mHeaderAndFooterWrapper);// 刷新数据需要使用外层AdaptermHeaderAndFooterWrapper.notifyDataSetChanged();```添加头尾布局:```private void addHeaderAndFooterView() {    // 头布局    View headerView = View.inflate(this, R.layout.layout_header_footer, null);    TextView headerItem = headerView.findViewById(R.id.tv_item);    headerItem.setText("HeaderView");    mHeaderAndFooterWrapper.addHeaderView(headerView);    // 尾布局    View footerView = View.inflate(this, R.layout.layout_header_footer, null);    TextView footerItem = footerView.findViewById(R.id.tv_item);    footerItem.setText("FooterView");    mHeaderAndFooterWrapper.addFooterView(footerView);}```## 5.拖拽排序效果图:![Picture](//upload-images.jianshu.io/upload_images/3270074-8e9af10ab210c54b.gif)集成:```// CommonAdapter为项目原有AdapterCommonAdapter commonAdapter = new CommonAdapter(mDataList);// 拖拽事件响应时间默认为200ms,可自定义mDragAndDropWrapper = new DragAndDropWrapper(commonAdapter, mDataList, 200);mDragAndDropWrapper.attachToRecyclerView(mRecyclerView, true);mRecyclerView.setLayoutManager(new LinearLayoutManager(this));mRecyclerView.setAdapter(mDragAndDropWrapper);// 刷新数据需要使用外层AdaptermDragAndDropWrapper.notifyDataSetChanged();```## 6.侧滑删除效果图:![Picture](//upload-images.jianshu.io/upload_images/3270074-e435f8bfa3f9c3c4.gif)集成:```// CommonAdapter为项目原有AdapterCommonAdapter commonAdapter = new CommonAdapter(mDataList);mSwipeToDismissWrapper = new SwipeToDismissWrapper(commonAdapter, mDataList);mSwipeToDismissWrapper.attachToRecyclerView(mRecyclerView);mRecyclerView.setLayoutManager(new LinearLayoutManager(this));mRecyclerView.setAdapter(mSwipeToDismissWrapper);// 设置删除事件监听mSwipeToDismissWrapper.setItemDismissListener(new ItemSwipeCallback.ItemDismissListener() {    @Override    public void onItemDismiss(final int position) {        // TODO    }});// 刷新数据需要使用外层AdaptermSwipeToDismissWrapper.notifyDataSetChanged();```## 7.侧滑选择效果图:![Picture](//upload-images.jianshu.io/upload_images/3270074-d5eb2f0dcdcb7dee.gif)集成:```            // Item布局                    // 功能按钮            ```**SlideItemView控件是通用的,不局限于RecyclerView,也可以配合其他控件或者单独使用。**## 8.万能分割线效果图:![Picture](//upload-images.jianshu.io/upload_images/3270074-d3a114bfcbfe8037.gif)集成:```// CommonAdapter为项目原有AdaptermDividerAdapter = new DividerAdapter(mDataList);LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);mRecyclerView.setLayoutManager(linearLayoutManager);// 设置分割线SuperDividerItemDecoration dividerItemDecoration = new SuperDividerItemDecoration(this, linearLayoutManager);// 分割线样式可自定义dividerItemDecoration.setDrawable(getResources().getDrawable(R.drawable.custom_bg_divider));mRecyclerView.addItemDecoration(dividerItemDecoration);mRecyclerView.setAdapter(mDividerAdapter);```分割线样式:```        ```## 9.写在最后到这里,RecyclerViewHelper的基本功能就介绍完了,如有问题可以给我留言评论或者在GitHub中提交Issues,谢谢![GitHub传送门](https://github.com/alidili/RecyclerViewHelper)RecyclerViewHelper项目后续还会增加更多常用功能,Kotlin版本正在开发中,敬请期待!  继续阅读全文



想在安卓巴士找到更多优质博文,可移步博客区

如果对本篇文章感兴趣,请前往,
原文地址:
http://www.apkbus.com/blog-822715-79880.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区

广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表