UltimateRecyclerView 实战指南:集刷新、加载更多、拖拽与吸附头于一体的 Android RecyclerView 增强方案
发布时间:2026/9/29 9:20:35来源:尧图网络
移动开发UI组件【免费下载链接】UltimateRecyclerViewA RecyclerView(advanced and flexible version of ListView in Android) with refreshing,loading more,animation and many other features.项目地址https://gitcode.com/gh_mirrors/ul/UltimateRecyclerView点击查看免费下载UltimateRecyclerView 是一个构建于 RecyclerView 之上、支持 AndroidX 的功能增强组件在保持 just like RecyclerView 使用体验的同时原生集成了下拉刷新、上滑加载更多、滑动删除、拖拽排序、多种入场动画、Instagram 式吸附头部、滚动时自动隐藏 Toolbar 与悬浮按钮等能力。本文将以仓库 README.md 为主线结合模块源码逐一讲解快速接入、核心 API、适配器体系与各功能模块的实战用法读完即可在真实项目中完成集成与二次开发。项目定位一个高级且灵活的 ListView 替代品按照 README.md 的定位UltimateRecyclerView 是 RecyclerView 的advanced and flexible version即一个使用方式与 RecyclerView 几乎一致、但内置大量常用交互能力的列表容器。项目处于持续开发状态README 明确标注 UltimateRecyclerView is a project under development并已完整迁移到 AndroidXv0.8.0 起。从源码结构看核心类 UltimateRecyclerView.java 继承自FrameLayout并实现Scrollable接口内部组合了RecyclerView、VerticalSwipeRefreshLayout下拉刷新容器、默认悬浮按钮、空视图 ViewStub 与浮动按钮 ViewStub其布局骨架定义在 ultimate_recycler_view_layout.xml 中。也就是说开发者只需在 XML 中引入一个UltimateRecyclerView所有增强能力都围绕它展开。功能特性全景README 列出的核心特性共 15 项这些能力几乎都能在 UltimateRecyclerView.java 与配套模块中找到对应实现特性说明对应实现/模块下拉刷新基于 AndroidX SwipeRefreshLayoutsetDefaultOnRefreshListener()、VerticalSwipeRefreshLayout多种动画适配器加载动画与 Item 增删动画UltimateViewAdapter.getAdapterAnimations()、setItemAnimator()滑动删除Swipe to dismiss侧滑删除列表项SwipeDismissTouchListener、SwipeableUltimateRecyclerview视差/普通头部可设置视差滚动头部或普通头部setParallaxHeader()/setNormalHeader()拖拽排序长按拖拽调整顺序DragDropTouchListener、dragsortadapter包加载更多滑到底部自动加载无限滚动setOnLoadMoreListener()、scroll_load_more_detection()自定义加载更多视图底部进度条可完全自定义setLoadMoreView()、bottom_progressbar.xml滚动联动 Toolbar/FAB下滑隐藏、上滑显示setScrollViewCallbacks()、ObservableScrollState滚动条支持纵向/横向滚动条样式recyclerviewScrollbars属性彩色刷新样式自定义 SwipeRefresh 配色setDefaultSwipeToRefreshColorScheme()、recyclerviewDefaultSwipeColor吸附头部类似 Instagram 的分组吸附标题stickyheadersrecyclerview包、generateHeaderId()多布局适配器同一列表内支持不同 item 布局VIEW_TYPES多视图类型体系带动画的加载适配器适配器加载时逐项动画getAdapterAnimations()的 5 种动画可展开列表RecyclerView 内支持可展开的父/子项expanx包、LinearExpanxURVAdapter快速接入Gradle 与 Maven 依赖README 给出了最直接的接入方式。使用 Gradle 时在项目级build.gradle中声明仓库repositories { mavenCentral() google() }然后在模块依赖中添加版本以 README.md 当前给出的 0.9.0 为准该版本为 AndroidX 迁移后的版本dependencies { implementation com.marshalchen.ultimaterecyclerview:library:0.9.0 }或者通过 Maven 引入dependency groupIdcom.marshalchen.ultimaterecyclerview/groupId artifactIdlibrary/artifactId version0.9.0/version /dependency由于依赖了google()仓库与 AndroidX 组件构建环境需要能正常访问这两个仓库源。在布局中使用 UltimateRecyclerView在 XML 中声明方式与普通 RecyclerView 几乎一致com.marshalchen.ultimaterecyclerview.UltimateRecyclerView android:layout_widthmatch_parent android:layout_heightmatch_parent android:idid/ultimate_recycler_view /组件还提供了一组自定义属性定义于 attrs.xml 的UltimateRecyclerviewstyleable 中可以在 XML 中直接完成初始化配置属性类型说明recyclerviewPaddingdimension统一设置 RecyclerView 四边内边距默认 -1.1f即未启用recyclerviewPaddingTop/Bottom/Left/Rightdimension分别设置各方向内边距默认 0recyclerviewClipToPaddingboolean是否裁剪内边距默认 falserecyclerviewEmptyViewreference空视图的布局资源 IdrecyclerviewFloatingActionViewreference悬浮按钮组的布局资源 IdrecyclerviewScrollbarsenum滚动条样式none(0) /vertical(1) /horizontal(2)recyclerviewDefaultSwipeColorreference下拉刷新默认配色的颜色数组资源这些属性在UltimateRecyclerView.initAttrs()中通过TypedArray解析并作用于内部 RecyclerView例如recyclerviewPadding会直接调用mRecyclerView.setPadding()而recyclerviewScrollbars会选择 vertical_recycler_view.xml 或 horizontal_recycler_view.xml 替换内部布局以叠加滚动条装饰。适配器体系UltimateViewAdapter 与 easyRegularAdapterUltimateRecyclerView 的能力大多依赖其专属适配器基类 UltimateViewAdapter.java。它继承自RecyclerView.Adapter同时实现了StickyRecyclerHeadersAdapter吸附头部与ItemTouchHelperAdapter拖拽/滑动是驱动头部 数据 加载更多 Footer 广告位复合列表的关键。内部视图类型VIEW_TYPESUltimateViewAdapter定义了 7 种内部视图类型见 UltimateViewAdapter.javaNORMAL普通数据项HEADER自定义头部FOOTER默认加载更多尾部NOVIEW空视图占位ADVIEW广告视图CUSTOMVIEW自定义扩展视图SECTION分组类型getItemViewType()会根据是否启用 LoadMore、是否有 Header、适配器数据量是否为 0自动判定每个位置的类型这也是 README 中auto judge loadmore or header in adapter自动判定加载更多或头部的实现基础。抽象方法契约继承UltimateViewAdapter需要实现的核心抽象方法getAdapterItemCount()返回真实数据项数量不含头部/Footer 等装饰项onCreateViewHolder(ViewGroup)创建普通数据项 ViewHoldernewFooterHolder(View)/newHeaderHolder(View)创建尾部/头部 ViewHoldergenerateHeaderId(int)为吸附头部生成分组 Id不需要时返回 -1onBindViewHolder()绑定数据内部已按视图类型分流getItemCount()由基类统一计算为getAdapterItemCount() totalAdditionalItems()其中totalAdditionalItems()在有 Header 时 1、启用 LoadMore 时 1从而保证装饰项不污染数据位置。内置便捷增删改方法基类提供了线程安全的列表操作工具内部以mLock对象锁保护数据且自动处理 Header/Footer 带来的位置偏移insertInternal(list, item, position)/insertFirstInternal/insertLastInternalinsertInternal(newList, originalList)整批插入并触发notifyItemRangeInsertedremoveInternal(list, position)/removeFirstInternal/removeLastInternalclearInternal(list)/removeAllInternal(list)清空并依据空视图策略执行对应的移除通知swapPositions(list, from, to)拖拽换位自动阻止 Header 与 Footer 参与交换easyRegularAdapter面向常规列表的快速适配器quickAdapter/easyRegularAdapter.java 是面向普通单布局列表的简化实现只需三个抽象方法即可工作public abstract class easyRegularAdapterT, BINDHOLDER extends UltimateRecyclerviewViewHolder extends UltimateViewAdapter { protected abstract int getNormalLayoutResId(); // 普通 item 布局 protected abstract BINDHOLDER newViewHolder(View view); // ViewHolder protected abstract void withBindHolder(BINDHOLDER holder, T data, int position); // 绑定数据 }它内置了insert(item)、insertFirst、insertLast、removeAt、removeFirst、removeLast、removeAll、swapPositions(from, to)等公开方法以及getItem(int)、getObjects()、isEmpty()、hasItem()等查询接口。getItemDataPosFromInternalPos()负责把包含头部偏移的展示位置换算回真实数据下标。ViewHolder 基类配套的 UltimateRecyclerviewViewHolder.java 实现了ItemTouchHelperViewHolder提供findViewByIdEfficient(id)带 SparseArray 缓存的快速 findViewByIdonBindView(Object)/updateView()数据绑定模板方法onItemSelected()/onItemClear()拖拽选中/释放回调swipeLayout字段默认尝试从 item 中查找recyclerview_swipe布局以支持侧滑下拉刷新与刷新配色调用 UltimateRecyclerView.java 的setDefaultOnRefreshListener()即可启用内置的 SwipeRefreshLayout 并注册刷新回调ultimateRecyclerView.setDefaultOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { Override public void onRefresh() { // 拉取最新数据 onFireRefresh(); } });刷新结束或数据更新后调用setRefreshing(false)关闭刷新动画。该方法的内部实现会先setEnabled(true)打开刷新能力再通过setColorSchemeColors()设置配色——若在 XML 中配置了recyclerviewDefaultSwipeColor引用的颜色数组则使用该配色否则回退到 Android 内置的四色蓝/绿/橙/红。也可以在代码中通过setDefaultSwipeToRefreshColorScheme(int... colors)覆盖配色。注意默认情况下mSwipeRefreshLayout.setEnabled(false)见initViews()即刷新功能是按需开启的。加载更多无限滚动与自定义底部视图核心调用链加载更多由滚动监听驱动。UltimateRecyclerView.setDefaultScrollListener()注册的内部OnScrollListener在每次滚动时调用scroll_load_more_detection()该方法先根据布局管理器类型LINEAR/GRID/STAGGERED_GRID计算首尾可见位置当bottomEdgeHit总项数 - 可见项数 首个可见项位置为 true 且加载更多开关开启时触发onLoadMoreListener.loadMore()随后调用mAdapter.internalExecuteLoadingView()显示底部加载视图。按 BasicFunctions.java 的示例接入ultimateRecyclerView.setLoadMoreView(R.layout.custom_bottom_progressbar); // 自定义底部加载视图 ultimateRecyclerView.setOnLoadMoreListener(new UltimateRecyclerView.OnLoadMoreListener() { Override public void loadMore(int itemsCount, int maxLastVisiblePosition) { // 模拟网络请求后追加数据 new Handler().postDelayed(new Runnable() { public void run() { onLoadmore(); // 向 adapter 插入新数据 } }, 500); } });OnLoadMoreListener接口UltimateRecyclerView.java的回调签名为void loadMore(int itemsCount, int maxLastVisiblePosition)分别给出当前总项数与最后一个可见位置便于分页逻辑判断。自定义加载视图setLoadMoreView(View)与setLoadMoreView(LayoutRes int layout)均可设置底部加载视图若传 nullUltimateRecyclerView会自动回退到默认的 bottom_progressbar.xml。视图的显示/隐藏由适配器侧的revealDispatchLoadMoreView()/removeDispatchLoadMoreView()控制。启用与禁用disableLoadmore()关闭加载更多mIsLoadMoreWidgetEnabled false并调用mAdapter.enableLoadMore(false)reenableLoadmore()重新开启加载更多isLoadMoreEnabled()查询当前状态从源码看enableLoadMore(boolean)通过delayEnableLoadmore一个Runnable延迟切换状态这是为了避免滚动过程中因数据变化导致的notifyItemRemoved位置不一致崩溃RecyclerView的经典 Invalid item position 问题加载视图的移除在延迟任务中执行。空视图策略EMPTY_* 与 STARTWITH_* 策略UltimateRecyclerView内置了 ViewStub 形式的空视图布局骨架见 ultimate_recycler_view_layout.xml 中的emptyview并定义了 4 种空视图展示策略UltimateRecyclerView.java常量值含义EMPTY_CLEAR_ALL0数据清空时全部清除含头部与加载项EMPTY_SHOW_LOADMORE_ONLY1只保留加载更多项EMPTY_KEEP_HEADER2保留头部移除加载项EMPTY_KEEP_HEADER_AND_LOARMORE3头部与加载项都保留以及 2 种初始化策略常量值含义STARTWITH_OFFLINE_ITEMS0假定初始就有本地数据adapter 数据为 0 时展示空视图STARTWITH_ONLINE_ITEMS1假定初始从网络加载先隐藏空视图并显示加载使用方式来自 demo 的 BasicFunctions.javaultimateRecyclerView.setEmptyView(R.layout.empty_view, UltimateRecyclerView.EMPTY_CLEAR_ALL);setEmptyView()有多个重载可额外传入初始化策略与emptyViewOnShownListener监听空视图展示回调。空视图的展示判断在updateHelperDisplays()中当 adapter 数据量变为 0 且策略允许时显示数据恢复后自动隐藏。也可以手动调用showEmptyView()/hideEmptyView()控制。头部视图视差头部与普通头部// 视差头部随滚动以 0.5 倍速平移 ultimateRecyclerView.setParallaxHeader(getLayoutInflater() .inflate(R.layout.parallax_recyclerview_header, ultimateRecyclerView.mRecyclerView, false)); // 普通头部 ultimateRecyclerView.setNormalHeader(headerView);从源码看setParallaxHeader(View)会把传入视图包装进CustomRelativeWrappersetNormalHeader(View)则复用同一套包装但关闭视差开关。视差效果在默认滚动监听中实现mTotalYScrolled dy累计滚动距离再以SCROLL_MULTIPLIER 0.5f的系数调用translateHeader()产生位移动画。通过setOnParallaxScroll(OnParallaxScroll)还可以拿到滚动百分比demo 中用它来渐变 Toolbar 背景透明度ultimateRecyclerView.setOnParallaxScroll(new UltimateRecyclerView.OnParallaxScroll() { Override public void onParallaxScroll(float percentage, float offset, View parallax) { Drawable c toolbar.getBackground(); c.setAlpha(Math.round(127 percentage * 128)); } });注意视差头部基于 FrameLayout 平移实现头部高度大于一屏或滚动越界时效果会受of mHeader.getHeight()条件约束。拖拽排序、滑动删除与滑动刷新联动拖拽能力由 DragDropTouchListener.java 与 dragsortadapter 包提供配合UltimateViewAdapter.onItemMove(from, to)实现换位。在 demo 的 SimpleAdapter.java 中可以看到标准写法onItemMove内先调用swapPositions(fromPosition, toPosition)交换数据再super.onItemMove()触发notifyItemMovedonItemDismiss内调用remove(position)删除数据。拖拽时 ViewHolder 的onItemSelected()/onItemClear()可用于高亮被拖拽项。滑动删除另有独立实现 SwipeDismissTouchListener.java 与可整体替换的 SwipeableUltimateRecyclerview.java。此外还内置了基于 SwipeLayout 的侧滑菜单能力drag_edge、swipeMode、swipeActionLeft/Right等属性定义于 attrs.xmldemo 布局 item_swipeable.xml 展示了前后两层视图的侧滑结构。吸附头部Sticky Header吸附头部逻辑位于 stickyheadersrecyclerview 包核心是StickyRecyclerHeadersDecoration装饰器与StickyRecyclerHeadersAdapter接口。UltimateViewAdapter已实现该接口使用方式在适配器中实现generateHeaderId(int position)返回分组 Iddemo 中按字符串首字符分组实现onCreateHeaderViewHolder()与onBindHeaderViewHolder()创建并绑定头部在页面中给 RecyclerView 添加装饰器StickyRecyclerHeadersDecoration headersDecor new StickyRecyclerHeadersDecoration(simpleRecyclerViewAdapter); ultimateRecyclerView.addItemDecoration(headersDecor);demo 的头部布局见 stick_header_item.xml。吸附头部在滚动时会固定在顶部直到下一分组头部进入效果与 Instagram 列表一致。多布局与广告位注入多视图类型适配器UltimateDifferentViewTypeAdapter.java 与 UltimateGridLayoutAdapter.java 支撑不同 item 布局混合展示demo 中 multiitemdemo 提供了两种 binderSample1Binder.java、Sample2Binder.java的完整示例。广告位注入AdmobAdapterquickAdapter/AdmobAdapter.java 在列表数据流中按频率插入广告视图对应VIEW_TYPES.ADVIEW构造参数adview广告视图ViewGroup 子类insertOncetrue 表示广告只插入一次false 表示按固定间隔循环插入setInterval广告出现的数据项间隔内部换算为adfrequency setInterval 1可选AdviewListener在广告即将出现在屏幕附近时生成广告视图adapter 会通过isOnAdView(pos)判断当前位置是否为广告位并在getItemDataPosFromInternalPos()中扣除广告位偏移保证数据与广告的位置换算正确。demo 参考 admobdemo。动画体系适配器加载动画UltimateViewAdapter.getAdapterAnimations()UltimateViewAdapter.java内置 5 种基于 ObjectAnimator 的入场动画对应枚举AdapterAnimationTypeAlphaIn透明度 0.5 → 1SlideInBottom自底部滑入translationY 从视图高度到 0ScaleIn缩放 0.5 → 1SlideInLeft/SlideInRight自左右两侧滑入配合 SimpleAnimationAdapter.javademo 中的动画适配器装饰类即可为列表加载添加动画。注意此类动画基于属性动画最低要求 API 11Honeycomb源码标注TargetApi(Build.VERSION_CODES.HONEYCOMB)。Item 增删动画与 RecyclerView 一致通过setItemAnimator(RecyclerView.ItemAnimator)设置 ItemAnimator默认DefaultItemAnimator。demo 的 BasicFunctions.java 展示了如何用 AnimationType.java 枚举切换不同动画器并设置时长ultimateRecyclerView.setItemAnimator(AnimationType.values()[position - 1].getAnimator()); ultimateRecyclerView.getItemAnimator().setAddDuration(300); ultimateRecyclerView.getItemAnimator().setRemoveDuration(300);滚动联动隐藏/显示 Toolbar 与悬浮按钮通过setScrollViewCallbacks(ObservableScrollViewCallbacks)注册滚动回调在onUpOrCancelMotionEvent中根据滚动方向ObservableScrollState.UP/DOWN控制 Toolbar 与 FAB 的显隐demo 写法见 BasicFunctions.javaultimateRecyclerView.setScrollViewCallbacks(new ObservableScrollViewCallbacks() { Override public void onScrollChanged(int scrollY, boolean firstScroll, boolean dragging) { } Override public void onUpOrCancelMotionEvent(ObservableScrollState observableScrollState) { if (observableScrollState ObservableScrollState.UP) { ultimateRecyclerView.hideToolbar(toolbar, ultimateRecyclerView, getScreenHeight()); ultimateRecyclerView.hideFloatingActionMenu(); } else if (observableScrollState ObservableScrollState.DOWN) { ultimateRecyclerView.showToolbar(toolbar, ultimateRecyclerView, getScreenHeight()); ultimateRecyclerView.showFloatingActionMenu(); } } }); ultimateRecyclerView.showFloatingButtonView();滚动状态机的计算集中在enableShoworHideToolbarAndFloatingButton()它逐项累计子视图高度估算 scrollY跳过多项时用首可见项高度近似源码注释中已说明该近似可能导致底部回滚时 scrollY 不精确并记录ObservableScrollStateUP 向下滚 / DOWN 向上滚 / STOP 停止。悬浮按钮默认是一个AddFloatingActionButton见 ultimate_recycler_view_layout.xml也可通过recyclerviewFloatingActionView属性指定自定义 FAB 组布局。布局管理器线性、网格与瀑布流UltimateRecyclerView支持三种标准 LayoutManager滚动加载检测在 scroll_load_more_detection() 中按类型分别计算首尾可见位置不支持的 LayoutManager 会抛出RuntimeException。LAYOUT_MANAGER_TYPE枚举定义了LINEAR、GRID、STAGGERED_GRID、PUZZLE四类。库内还提供了若干扩展管理器layoutmanagers 包ScrollSmoothLineaerLayoutManager平滑线性滚动CustomLinearLayoutManager自定义线性管理器ClassicSpanGridLayoutManager网格管理器demo 的configGridLayoutManager中以 2 列使用demo 中的配置示例// 瀑布流3 列纵向 StaggeredGridLayoutManager sglm new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL); rv.setLayoutManager(sglm); // 网格2 列 ClassicSpanGridLayoutManager mgm new ClassicSpanGridLayoutManager(this, 2, ad); rv.setLayoutManager(mgm); // 线性纵向、禁用翻转、滚动时长 300ms ScrollSmoothLineaerLayoutManager lgm new ScrollSmoothLineaerLayoutManager(this, LinearLayoutManager.VERTICAL, false, 300); rv.setLayoutManager(lgm);网格与瀑布流演示见 griddemo含 GridLayoutRVTest.java、GridJRAdapter.java 等。其他常用 API 速查以下方法均定义于 UltimateRecyclerView.java可直接调用方法作用setAdapter(UltimateViewAdapter)/swapAdapter(adapter, recycle)设置/交换适配器内部注册数据观察者、同步空视图与 LoadMore 状态setLayoutManager(RecyclerView.LayoutManager)设置布局管理器addItemDecoration(...)添加装饰器分割线等内置DividerItemDecorationsetHasFixedSize(boolean)固定尺寸优化setRefreshing(boolean)手动控制刷新动画enableDefaultSwipeRefresh(boolean)开关下拉刷新addOnScrollListener(...)/removeOnScrollListener(...)自定义滚动监听setRecylerViewBackgroundColor(int)设置列表背景色getEmptyView()获取空视图showEmptyView()/hideEmptyView()手动显隐空视图版本演进与兼容性README 的 Version Log 记录了项目演进脉络可作为版本选型依据v0.8.0迁移到 AndroidX当前推荐基线v0.7.0支持 RecyclerView 24.0.0 的大部分特性改进 UltimateAdapter缩减库体积并修复若干 bugv0.5.8基于 support library 23.4.0修复加载更多/禁用加载更多的过早触发问题v0.5.6基于 23.3.0最低支持到 v13新增TimeLineView节点连接器LinearLayoutManager 下逐项绘制时间线节点v0.5.0升级到 v23.2.1v0.4.9最后一个基于 V23.1.1 的版本v0.3.11基于 support library 22.x 的老版本当前仓库的模块构建配置位于 ultimaterecyclerview 目录demo 应用位于 app 目录含 AndroidManifest.xml可通过仓库根目录的 gradlew 包装脚本编译运行示例。Demo 应用与示例代码仓库自带完整 demo 工程源码位于 app/src/main/java/com/marshalchen/ultimaterecyclerview/demo按功能分包组织是学习各特性的最佳入口loadmoredemo加载更多、下拉刷新、空视图、视差头部、滚动联动BasicFunctions.java是各 Activity 的公共基类dragdemo拖拽排序griddemo网格与瀑布流multiitemdemo多布局混排expandemo可展开列表admobdemo广告位注入swiplistdemo侧滑列表时间线节点能力可参考 timelineview 包与 TimeLineAdapter.java可展开列表的适配器实现见 expanx/LinearExpanxURVAdapter.java。开源协议与致谢UltimateRecyclerView 基于 Apache License 2.0 开源LICENSECopyright 2014-present Marshal Chen可自由用于商业项目。README 的 Thanks 部分列出了一批借鉴/集成的开源组件recyclerview-animators动画器、SuperRecyclerView多 LayoutManager 处理、RecyclerView-FlexibleDivider分割线、android-parallax-recyclerview视差头部、floating-action-buttonFAB、Ultra Pull To Refresh多彩刷新、recyclerview-stickyheaders吸附头部与 AndroidSwipeLayout侧滑。这些上游项目的能力在库内经过整合与再封装形成了本文所述的统一 API。小结UltimateRecyclerView 的价值在于把下拉刷新、加载更多、拖拽、侧滑、吸附头、空视图、滚动联动等高频列表需求一次性内置同时保留 RecyclerView 的编程模型Adapter LayoutManager ItemDecoration ItemAnimator接入成本低、扩展面广。使用时注意三点适配器优先继承UltimateViewAdapter或其子类以享受头部/加载项/空视图的内置支持数据增删尽量走基类提供的insertInternal/removeInternal/clearInternal工具方法以保证通知与位置偏移正确版本选择以支持 AndroidX 的 v0.8.0 为基线。详细源码与示例可继续阅读 UltimateRecyclerView.java 与 UltimateViewAdapter.java。赞分享移动开发UI组件【免费下载链接】UltimateRecyclerViewA RecyclerView(advanced and flexible version of ListView in Android) with refreshing,loading more,animation and many other features.项目地址https://gitcode.com/gh_mirrors/ul/UltimateRecyclerView点击查看免费下载相关推荐如何快速实现RecyclerView加载更多基于android-advancedrecyclerview的终极方案如何快速实现RecyclerView加载更多基于android advancedrecyclerview的终极方案 android advancedrecyc移动开发UI组件解决RecyclerView吸附难题MultiSnapRecyclerView全方位实战指南解决RecyclerView吸附难题MultiSnapRecyclerView全方位实战指南 你是否还在为RecyclerView无法实现精准吸附而烦恼是否Vue.Draggable拖拽吸附辅助线显示时机拖拽时显示Vue.Draggable拖拽吸附辅助线显示时机拖拽时显示 在使用Vue.Draggable实现拖拽功能时拖拽吸附辅助线的显示时机控制是提升用户体验的关键。前端UI组件上一篇Deepagents供应链管理优化物流和库存的AI代理终极指南下一篇3分钟掌握TensorRT模型序列化从优化到部署的性能飞跃创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网