今天给大家带来一个对于Recycleview的终极封装包含头、尾。 背景 Recycleview可以说是我们最常用的控件之一,只要有列表几乎就会用到。...>(>﹏<) 暂时就这么多了~ (>﹏<) 点我加载更多~ 点击事件 因为Recycleview...holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick...holder.mTvMsg.setOnClickListener(new View.OnClickListener() { @Override public void onClick...void load(); } } 有了这个BaseRecycleViewAdapter那么我们再写Adapter的时候,直接继承这个BaseRecycleViewAdapter就可以了 我是用Kotlin
在RecycleView还没有出现的那个年代,依稀记得是重写GridView实现拖拽,WindowManager实现拖拽的镜像。 不过,现在好了,有了RecycleView之后,一切都变得简单了。...因为RecycleView提供了拖动的回调ItemTouchHelper.Callback,通过实现该类,会让我们少写很多代码。 先看一下,简化后的Demo效果图。 ?...viewHolder, RecyclerView.ViewHolder target) { int fromPosition = viewHolder.getAdapterPosition...holder.name.setOnClickListener(new View.OnClickListener() { @Override public void onClick...holder.delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick
,让许多开发者抛弃了以往的ListView,那么RecycleView在MVVM架构下又该怎么实现呢?...- 5.当然大家还可以为RecycleView设置更多的初始化的实例。...只是提供一个ViewHolder比较简单。...2.onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) 1.1行获取了数据。...- 3.在RecycleView中使用了我在工具类BindingAdapters中定义的items和itemView这两个字段来为RecycleView设置初始化变量。
一、文章快速总结RecycleView是安卓的列表,可以灵活控制每一项的数据,布局,动画。Adaper是整体适配器,逻辑放在这里。Holder是每一项的内容,把控件初始化放在这里。...二、RecycleView是什么 RecycleView是Android5.0后谷歌推出的一个用于在有限的窗口中展示大量数据集的控件,位于support-v7包中。...三、RecycleView的优点 1、支持局部刷新。 2、可以自定义item增删时的动画。 3、能够实现item拖拽和侧滑删除等功能。...holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick...当我们定义好接口后,我们在onBindViewHolder()方法中为holder.itemView(itemView是列表中的每一个item项)设置了点击事件监听,然后在onClick()中判断是否有用户传递过
其次在layout文件夹下新建item.xml(Recycleview的Item布局)和tv.xml文件(文字效果),具体代码参详源码 3、加载数据 在MainActivity中的onCreate方法中初始化数据...设置LayoutManager以及分割线的功能 4、RecycleViewAdapter的实现 使用过RecycleView的小伙伴都知道,RecyleView自身没有回调接口,需要我们为其添加,供外部调用...holder.ivDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick...holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick..., ViewHolder)} and / or * {@link Callback#onSwiped(ViewHolder, int)}
比写代码难多了,最后绞尽脑汁的想了一个 ardf,英文 “android rapid development framework” 的缩写,即 “Android 快速开发框架”,很好,已经完成这个框架的 50% 工作了...3.1 扩展属性介绍 ardf通过 DataBinding 的 BindingAdapter 扩展了 RecycleView 一系列属性,用于在 xml 布局中对 RecyclerView 进行快捷配置...,无需编写 java/kotlin 代码即可完成对 RecyclerView 的全部配置,包括列表数据、item 布局、事件等,具体可配置属性如下: 属性名 类型 描述 data List RecycleView...' id 'org.jetbrains.kotlin.android' id 'kotlin-kapt' } ardf 的使用配置就完成了,点击 Sync Now同步 build.gradle..." android:layout_marginEnd="20dp" android:text="删除item" android:onClick
除此之外,PageList还可以想RecycleView.Adapter发送更新的信号,驱动UI的刷新。 2....PagedListAdapter PageListAdapter继承自RecycleView.Adapter,和RecycleView实现方式一样,当数据加载完毕时,通知RecycleView数据加载完毕...implementation "androidx.paging:paging-runtime-ktx:$paging_version" // For Kotlin use paging-runtime-ktx...optional - RxJava support implementation "androidx.paging:paging-rxjava2:$paging_version" // For Kotlin...) : RecyclerView.ViewHolder(binding.root) { fun bind(listener: View.OnClickListener, item: User
一般我们都是自己封装RecycleView或者使用XRecycleView这种第三方库去做,而Paging 就是Google为我们提供的分页功能的标准库,这样我们就无须自己去基于RecycleView实现分页功能...和UI层都有具体的表现,接下来我们通过一个示例来逐步讲解Paging是如何在项目架构中工作的。...View层数据请求并将结果显示在View上 到这里,基本工作已经差不多了,当然我们说的差不多了只是快能看到成果了,其中需要讲解的地方还有很多,最后一步我们在view中请求数据,并将结果绑定在adapter...除此之外,Paging3中还有一个比较重要的RemoteMediator,用来更好的加载网络数据库和本地数据库,我们后续有机会再为大家单独分享吧~ 2020年11月21日更新 paging3的设计理念是不建议对列表数据直接修改...;而是对数据源进行操作,数据源的变化会自动更新到列表,看到评论区中很多朋友说如何操作item的删除和修改,这里我们使用最简单的方式即可 对单个item的修改 我们都知道RecycleView中是没有直接监听
一般我们都是自己封装RecycleView或者使用XRecycleView这种第三方库去做,而Paging 就是Google为我们提供的分页功能的标准库,这样我们就无须自己去基于RecycleView实现分页功能...协程 看这一篇就够了 Kotlin Flow 看这一篇 带你入门~ 项目示例 在官方文档中也给出了我们Paging在架构中的使用图 ?...通过上图我们也可以清晰的看出来,Paging在仓库层、ViewModel和UI层都有具体的表现,接下来我们通过一个示例来逐步讲解Paging是如何在项目架构中工作的。...View层数据请求并将结果显示在View上 到这里,基本工作已经差不多了,当然我们说的差不多了只是快能看到成果了,其中需要讲解的地方还有很多,最后一步我们在view中请求数据,并将结果绑定在adapter...除此之外,Paging3中还有一个比较重要的RemoteMediator,用来更好的加载网络数据库和本地数据库,我们后续有机会再为大家单独分享吧~ 2020年11月21日更新 paging3的设计理念是不建议对列表数据直接修改
和listview区别 Recycleview布局效果更多,增加了纵向,表格,瀑布流等效果 Recycleview去掉了一些api,比如setEmptyview,onItemClickListener等等...,给到用户更多的自定义可能 Recycleview去掉了设置头部底部item的功能,专向通过viewholder的不同type实现 Recycleview实现了一些局部刷新,比如notifyitemchanged...Recycleview自带了一些布局变化的动画效果,也可以通过自定义ItemAnimator类实现自定义动画效果 Recycleview缓存机制更全面,增加两级缓存,还支持自定义缓存逻辑 Recycleview...,包含数据和position信息,复用时必须是相同位置的ViewHolder才能复用,应用场景在那些需要来回滑动的列表中,当往回滑动时,能直接复用ViewHolder数据,不需要重新bindView。...mViewCacheExtension(自定义缓存),不直接使用,需要用户自定义实现,默认不实现。
一般我们都是自己封装RecycleView或者使用XRecycleView这种第三方库去做,而Paging 就是Google为我们提供的分页功能的标准库,这样我们就无须自己去基于RecycleView实现分页功能...协程 看这一篇就够了 Kotlin Flow 看这一篇 带你入门~ 项目示例 在官方文档中也给出了我们Paging在架构中的使用图 ?...通过上图我们也可以清晰的看出来,Paging在仓库层、ViewModel和UI层都有具体的表现,接下来我们通过一个示例来逐步讲解Paging是如何在项目架构中工作的。...: class DataRecycleViewAdapter : PagingDataAdapterViewHolder...View层数据请求并将结果显示在View上 到这里,基本工作已经差不多了,当然我们说的差不多了只是快能看到成果了,其中需要讲解的地方还有很多,最后一步我们在view中请求数据,并将结果绑定在adapter
使用RecycleView和CardView展示已安装应用的包名和图标 ① 获取安装的应用信息 public class ApkInfos { Context mContext;...viewHolder = new ViewHolder(view); return viewHolder; } @Override public void...onBindViewHolder(ViewHolder viewHolder, int position){ ApkInfos apkInfos = new ApkInfos(mContext...viewHolder.imageView.setImageDrawable(drawable); //添加点击事件直接打开已安装的应用 viewHolder.cardView.setOnClickListener...(new View.OnClickListener() { @Override public void onClick(View view) {
简介 开始时我是用了下面的方式声明接口来做回调的,这么写是没问题的,用法也和Java里面一样,但是写完之后一想,这是Java的写法,难道Kotlin就没有自己的一套写法了?...**普通接口方式 ** interface IOnClickListener { operator fun invoke(position: Int) } 好了,话不多说,下面的语法就是Kotlin...(pos: Int,type: Int) -> Unit,var onItemClickListener: (pos: Int,type: Int) -> Unit) : RecyclerView.ViewHolder...--->type--->$type") },{ pos,type->toast("pos--->$pos--->type--->$type") }) adapter.appendList(list) recycleView.adapter...=adapter 好了,这就写完了,这就是Kotlin样式的Adapter和它的用法。
那时我明白了必须千方百计把Vitaly的多选概念设计实现出来;所以我几乎立即就开始了编写这个控件的工作。现在让我们来看看这个安卓的多选动画是如何诞生的。 ?...语言来做这个工作。...这里是我在实现这个库的过程中,Kotlin的这些特性给我带来了方便: 1.扩展函数 Kotlin的扩展函数功能使得我们可以为现有的类添加新的函数,而不用修改原来的类。 就拿安卓的View来说。...callback.onClick(holder.getAdapterPosition()); // ... }); } } 选中列表的adapter与之类似:...callback.onClick(holder.getAdapterPosition()); // ... }); } } Adapter继承两个不同基类的原因是未选中
ActivityManagerService,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,对于一些进程的启动,都会通过Binder通信机制传递给AMS,再处理给Zygote。...2)又比如插件化,通过了解启动流程可以知道哪些地方可以用来hook,从而完成我们侵入代码,替换Activity的工作。...,给到用户更多的自定义可能 Recycleview去掉了设置头部底部item的功能,专向通过viewholder的不同type实现 Recycleview实现了一些局部刷新,比如notifyitemchanged...Recycleview自带了一些布局变化的动画效果,也可以通过自定义ItemAnimator类实现自定义动画效果 Recycleview缓存机制更全面,增加两级缓存,还支持自定义缓存逻辑 Recycleview...mViewCacheExtension(自定义缓存),不直接使用,需要用户自定义实现,默认不实现。
CardView(这里用于作为recycleview的子项,用于显示水果) 1.1 实际上,CardView也是一个FrameLayout,只是额外提供了圆角和阴影等效果,看上去会有立体的感觉...,在ViewHolder里面 @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)...(view);//将子项作为参数传给ViewHolder,在ViewHolder里面 } //set对应子项对象 @Override public void onBindViewHolder...fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick...View.OnClickListener() { @Override public void onClick
> { private List mFruitList; static class ViewHolder extends RecyclerView.ViewHolder...) { @Override public void onClick(View v) { int position = holder.getAdapterPosition...holder.fruitImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick.../获取fragment的layout view = inflater.inflate(R.layout.collect_page, container, false); //对recycleview...goodsEntity.setGoodsPrice("100"+i); goodsEntityList.add(goodsEntity); } } /** * TODO 对recycleview
kapt "io.realm:realm-annotations-processor:0.87.1" 13.6.5 Butter Knife依赖 Butter Knife是基于注解处理方式工作:通过对代码注解自动生成模板代码...onClick(v, realmResults[adapterPosition]) } } 在ViewHolder初始化 View 的时候,我们使用ButterKnife进行了绑定...(caller: View, todo: Todo) } 我们在TodosFragment中实现这个方法: override fun onClick(caller: View, todo...} override fun onBindRealmViewHolder(viewHolder: ViewHolder, position: Int) { val todo...= realmResults[position] viewHolder.todoTitle.setText(todo.title) viewHolder.todoTitle.fontFeatureSettings
作 者 简 介 赵振华——京东商城资深工程师 9年以上开发经验,熟悉主流移动开发框架,热衷于探索新技术,曾负责过店铺、JDReact架构等项目的开发工作,目前专注于京东App领券中心频道开发,以及移动端技术难点攻克和新技术调研实施...setOnClickListener( object : View.OnClickListener { override fun onClick(v: View) {...)等等工作。...Kotlin将我们本来在代码层做的一些封装工作转移到了编译后端阶段,使得语言更加简洁。...统计业务模块的Java实现和Kotlin实现的代码量,不包含xml布局文件,代码量减少超过20%;代码减少最多的为pojo类,减少比例甚至超过80%;业务逻辑代码减少10%,同时代码会更加简洁直观,有助于提高代码可维护性
基于Kotlin的扩展 近几年Android对Kotlin的支持,我们开始使用 Android Kotlin extensions。 在文件中导入布局文件直接引用viewId。...Kotlin扩展: Kotlin扩展 是 Kotlin 语言的特性,其通过扩展函数的方式,允许开发者为现有的类添加新的函数或属性。...Kotlin扩展 使用起来相对简单,可以直接在布局文件中使用 Kotlin 扩展函数来查找和操作视图。...binding.button.setOnClickListener(new View.OnClickListener() { @Override public void onClick...ActivityMainBinding.inflate(layoutInflater); binding.include.includeTvTitle.setText("使用 include 布局中的控件, 不包含
领取专属 10元无门槛券
手把手带您无忧上云