https://blog.csdn.net/gdutxiaoxu/article/details/51473358 最近学习了RecycleView控件的使用,就尝试封装了RecycleView...下拉刷新控件,实现的功能有(下拉刷新和加载更多) 转载请注明原博客地址:http://blog.csdn.net/gdutxiaoxu/article/details/51473358 1 思路解析...1)我是通过继承LinearLayout来实现的,里面拥有SwipeRefreshLayout和RecycleView 2)下拉刷新是通过SwipeRefreshLayout设置监听器实现的 mSwipeRfl.setOnRefreshListener...(mRefreshListener); 3)加载更多是通过监听RecycleView的OnScrollListener mScrollListener = new RecyclerView.OnScrollListener...swipeLayout不允刷新, // 所以加载更多完毕的时候需要设置允许swipeLayout允许刷新 setRefreshEnabled(true); isLoadMore
的区别和联系,RecyclerView的绘制流程有一定了解,再来谈RecyclerView的性能提升。...ArrayList mChangedScrap : 主要用到刷新屏幕上的itemView数据,它不需要重新layout,notifyItemChanged()或者notifyItemRangeChanged...@Override public void onClick(View v) { //do something } } 5、局部刷新...可以用一下一些方法,替代notifyDataSetChanged,达到局部刷新的目的。...(删除、新增、位移、change动画),其次性能较低,它不管数据是否一样都整个刷新了一遍整个RecyclerView 。
最近项目中,有需求去写一个九宫格的菜单,因为之前有用RecycleView,知道去设置不同的setLayoutManager,就会呈现出不同的列表样式。...列表样式出来,但是还要加分隔线啊,到这里,就需要去重写RecyclerView.ItemDecoration,可以定制各种各样的分割线。 下面是我们需求需要的分割线: ?...上面就是我们需要的分割线,我们需求需要的是第二种,list.size()%column!=0时,bottomline占满屏幕宽度。这里我顺便把不占满屏幕的bottomline也画出来了。...这里mColumn默认为3,大家可以根据需求,来随意设置你需要的mColumn的值 具体写法: public class RecyclerGridDecoration extends RecyclerView.ItemDecoration...,这里的宽度需要和getItemOffsets()方法中的 //left、top、right、bottom值的关系处理好,否则显示的效果会不理想 paint.setStrokeWidth
列表拖动排序功能也算是比较常见的了。在RecycleView还没有出现的那个年代,依稀记得是重写GridView实现拖拽,WindowManager实现拖拽的镜像。...不过,现在好了,有了RecycleView之后,一切都变得简单了。因为RecycleView提供了拖动的回调ItemTouchHelper.Callback,通过实现该类,会让我们少写很多代码。...先看一下,简化后的Demo效果图。 ?...这里的实现的效果是: ① 第一个标签不可编辑 ② 除了第一个标签外,其它标签可拖拽排序和删除 ItemTouchHelper.Callback的实现类 public class ItemDragCallback...RecyclerView.ViewHolder target) { int fromPosition = viewHolder.getAdapterPosition(); //拖动的position
addOnPreDrawListener()在recycleView的item中使用时,即使使用removeOnPreDrawListener(this),但是onPreDraw()还是会被不断调用,阻塞...return true; } }); 解决办法一: 加isFirst进行判断,如上; 解决办法二: 换用其他得到view宽度的方法
autoPollTask; private boolean running; //标示是否正在自动轮询 private boolean canRun;//标示是否可以自动轮询,可在不需要的是否置...start(); break; } return super.onTouchEvent(e); } } Adapter中的代码如下...@Override public int getItemCount() { return Integer.MAX_VALUE; } Activity中的代码...mRecyclerView.setAdapter(adapter); if (true) //保证itemCount的总个数宽度超过屏幕宽度->自己处理 mRecyclerView.start
之前一直想找一个比较好的文件选择的第三方库,可是看了都不太满意。于是就自己做了一个。像这样的一个小的功能,做起来也不是什么难事。但是要做得好看,还是花了一些时间,但这都是值得的。...public void show(FragmentManager manager) { super.show(manager, TAG); } ... } 另外就是RecycleView...,之所以采用RecycleView,是因为发现如果用ListView,内存会不断增加,很难降下来。...ListView: public abstract class BaseAdapter extends RecyclerView.Adapter implements ListAdapter...目录跳转 这一部分逻辑有FileProvider类完成; 这里需要注意的是,有些手机不支持读取根目录,所以改为读取”/mnt/“作为根目录就行读取。 另外跳转目录都是改变当前路径,然后再刷新数据。
如何实现单条item刷新以及增减Item的自动刷新呢?今天我就要给大家带来一种方便的高解耦度的解决方案。 1.了解几个工具类 我们先来看几个我制作的工具类,这几个工具类可以一直复用。...- 5.当然大家还可以为RecycleView设置更多的初始化的实例。...中调用了adapter的几个对应的刷新的方法。...这样能保证数据源增删的时候自动刷新界面。 LayoutInflater inflater:用来初始化xml文件的,我想大家都知道。...2.在MVVM下构造极简的RecycleView 我们上面已经把我们接下来要使用的工具类介绍完了,以上的工具类之后基本不需要变化代码,所以在去除工具类之后我们的自动增删改的RecycleView将会只剩业务代码
在刷新的时候调用对应的刷新 api 即可看到动画 强制实现 ViewHolder RecyclerView 的源码是非常解耦的,且性能非常好 2,RecyclerView 中重要的组件 RecyclerView...所以如果 recycleView 的数据是固定的,则可以将此方法设置为 true。...() 进行刷新,这样会导致整个布局重绘,重新绑定所有的 ViewHolder,而且会失去可能的动画效果 DiffUtil 适用于整个页面需要刷新,但是有部分数据可能相同的情况。...这里的保留指的是 ,在原来数据的基础上进行增删改查,使其最终的结果和刷新的数据一样。...提供的 AsyncListDiffer(Executor)/ListAdapter(Recycler包下的 ListAdapter,不是平常使用的 adapter)。
在刷新的时候调用对应的刷新 api 即可看到动画 强制实现 ViewHolder RecyclerView 的源码是非常解耦的,且性能非常好 2,RecyclerView 中重要的组件 RecyclerView...所以如果 recycleView 的数据是固定的,则可以将此方法设置为 true。...() 进行刷新,这样会导致整个布局重绘,重新绑定所有的 ViewHolder,而且会失去可能的动画效果 DiffUtil 适用于整个页面需要刷新,但是有部分数据可能相同的情况。...这里的保留指的是 ,在原来数据的基础上进行增删改查,使其最终的结果和刷新的数据一样。...(Executor)/ListAdapter(Recycler包下的 ListAdapter,不是平常使用的 adapter)。
一开始就是出现的,并且在数据刷新后跟随LISTVIEW一起下滑。...4)如何去计算LISTVIEW的总高度 解决:本DEMO采用了2种方式, 第一种:鉴于订单中每个ITEM的布局都是固定的,于是在布局中设置ITEM的高度为固定值,之后乘以listAdapter.getCount... listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } totalHeight... = 0; // 由于ADD了个footer,所以总量减去1 Log.d("listAdapter.getCount()", "" + listAdapter.getCount()); ...for (int i = 0, len = listAdapter.getCount() - 1; i < len; i++) { View listItem = listAdapter.getView
recycleview.gif 整体思路: RecyclerView 是一个增强版的ListView,不仅可以实现和ListView同样的效果,还优化了ListView中存在的各种不足之处。...这里使用recycleviewAdapter的BRAVH框架中的树状列表,在adapter中添加两个样式,一个是分组的样式,一个是好友信息的样式。...1.引入依赖 这里要引入三个依赖:一个是recycleview的依赖,一个是adapter(BRAVH)的依赖,一个是圆形样式用于让头像显示为圆形。...BaseRecyclerViewAdapterHelper:2.9.30' compile 'com.gcssloop.widget:rclayout:1.4.1@aar' } 2.布局 在主界面中添加recycleView...="wrap_content"> 新建两个layout样式分别为好友列表的样式和好友信息的样式,在树状列表中引用这两个样式
最近有点忙,项目进度跟的比较紧。最近需求那边让我们写一个左右和上下都可滑动的列表,用来展示多个Title的值。这里我把需求简化了一下。老规矩,先看图。...在看到需求的时候,有在网上看看有没有别人造好的轮子,找是找到了,但是它是用HorizontalScrollView、ScrollView、ListView实现的,效果是有了,但是ListView没有复用了...分为上下两部分 ① TitleLayout 包括左边的"名称"(固定不可滑动),右边的"Title"(多个可滑动) ② Title的数据 使用的是RecyclerView 这里只要处理水平方向的手势滑动即可...private int[] mRightTitleWidthList = null; //展示数据时使用的RecycleView private RecyclerView mRecyclerView...; //RecycleView的Adapter private Object mAdapter; //需要滑动的View集合 private ArrayList<View
Recycleview相比也是每个Android开发者熟得不能再熟的控件了,但是你对他又真的了解多少呢?看看今天的三问你都能答得上来吗?...和listview区别 Recycleview布局效果更多,增加了纵向,表格,瀑布流等效果 Recycleview去掉了一些api,比如setEmptyview,onItemClickListener等等...,给到用户更多的自定义可能 Recycleview去掉了设置头部底部item的功能,专向通过viewholder的不同type实现 Recycleview实现了一些局部刷新,比如notifyitemchanged...Recycleview自带了一些布局变化的动画效果,也可以通过自定义ItemAnimator类实现自定义动画效果 Recycleview缓存机制更全面,增加两级缓存,还支持自定义缓存逻辑 Recycleview...对于新增或删除的时候,可以使用diffutil进行局部刷新,少用全局刷新 对于itemVIew进行布局优化,比如少嵌套等。
要实现这个拖动重排序功能,主要是用到了RecycleView的ItemTouchHelper类 首先是定义一个接口 interface ItemTouchHelperAdapter { fun...getMovementFlags方法中的dragFlags参数 如果是水平拖动,则用 ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT 如果是竖直方向上拖动,...则是用 ItemTouchHelper.UP or ItemTouchHelper.DOWN 最后绑定到我们的RecycleView上 val adapter = MyAdapter(myDataset...RecycleView支持拖动重排序的功能。...作者介绍 中年程序猿,十年移动端开发老司机,分享一线开发经验和知识,正在探索通过副业渡过中年危机 越努力越幸运,加油,一起遇见更好的自己
今天使用pdfRenderer配合recycleView制作简单的pdf阅读,但是发现item的ImageView刚开始是好的,各个item的布局紧凑。如图。 但是滑动之后,item的间距变大。...**最后发现是因为item的布局的根layout的height是match_parent;改为wrap_content就可以了。 <?
需求一: 在一个列表页中,第一次进入的时候,请求获取数据。 点击某个列表项,跳到详情页,再从详情页后退回到列表页时,不刷新。...然后在列表页的 created 函数里添加 ajax请求,这样只有第一次进入到列表页的时候才会请求数据,当从列表页跳到详情页,再从详情页回来的时候,列表页就不会刷新。 这样就可以解决问题了。...需求二: 在需求一的基础上,再加一个要求:可以在详情页中删除对应的列表项,这时返回到列表页时需要刷新重新获取数据。 我们可以在路由配置文件上对 detail.vue 增加一个 meta 属性。...当我们在详情页中删除了对应的列表项时,就可以将详情页 meta 属性中的 isRefresh 设为 true。这时再返回到列表页,页面会重新刷新。...例如从列表页进入了详情页,然后在详情页中删除了列表页中的某个选项,此时从详情页退回列表页时就要刷新,我们可以这样跳转: this.
实现的效果是这个样子的 看上去效果还是不错,不过现在有个刷新问题一直没能解决,刷新的时候里面的adapter进行刷新的时候总是会让里面的listview消失掉,应该是父listview先刷新完后,子...listview还未刷新完成,导致测量的高度不对,就会消失,像当前组已关闭这种,现在这个问题还没有想到办法解决的,试过比较多的方法,添加接口让子listview 刷新完成后再去更新父listview,但还是没有作用...,也用过ExpandableListView,但是效果达不到这种,所以没办法还是得用这种办法,有大神知道怎么解决刷新父listview时子listview消失的方法,指导下我,比较奇怪的时候刚开始初始化的时候子...listview是默认不显示的,当点击父listview去张开子listview,父listview应该会再次刷新,但子listview展开是可以的,然后下一次更新数据源的时候子listview又会自动关闭...,我猜应该是在刷新子listview的时候,父listview先更新完成,子listview的高度测量就没有对!
ajax由于他的异步特性 在第一次请求中的循环中嵌套第二个ajax会数据会读不出来 第一种 描述:如果条件许可,把两次请求都放在服务端处理掉一起发回来,这些就在客户端只有一次ajax了 优点:代码放在服务端...,安全性比较,且服务端处理速度较快 缺点:可能请求的数据格式是json,这样在服务端处理JSON数据还需要对JSON进行反序列化,这样就比较麻烦 第二种 描述:是我第一次解决这个问题的时候用的比较蠢的办法...ajax默认async是为ture的,当async: true 时,ajax请求是异步的。...但是其中有个问题:ajax请求和其后面的操作是异步执行的,那么当页面还未执行完,就可能已经执行了 ajax请求后面的操作。...当async:false时,ajax请求为同步,这时Ajax请求将整个浏览器锁死,直到请求结束 优点:可以按照逻辑顺序正常的写代码 缺点:同步时整个页面是被锁死的
题记 —— 优美的应用体验 来自于细节的处理,更源自于码农的自我要求与努力,当然也需要码农年轻灵活的思维。 *** Flutter是谷歌推出的最新的移动开发框架。...RefreshIndicator 是 Material 风格的滑动刷新Widget ,效果是下拉刷新显示的加载圆圈。...[在这里插入图片描述] *** 本文章实现Demo运行效果 如下: [在这里插入图片描述] Demo配置如下 ///下拉刷新组件 class HomePageRefreshIndicator extends...Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("下拉刷新..."), ), //下拉刷新组件 body: RefreshIndicator( //圆圈进度颜色 color: Colors.blue
领取专属 10元无门槛券
手把手带您无忧上云