首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在notifyDataSetChanged上的反向布局RecyclerView中不需要的滚动

,可以通过以下步骤来实现:

  1. 首先,确保你已经创建了一个RecyclerView,并设置了LayoutManager。LayoutManager可以是LinearLayoutManager、GridLayoutManager或StaggeredGridLayoutManager,具体根据你的需求来选择。
  2. 创建一个适配器(Adapter)来管理RecyclerView中的数据和视图。适配器需要继承自RecyclerView.Adapter,并实现必要的方法,如onCreateViewHolder、onBindViewHolder和getItemCount等。
  3. 在适配器中,你可以通过重写getItemViewType方法来为每个item指定不同的布局类型。根据你的需求,你可以创建一个常规的布局类型和一个反向布局类型。
  4. 在onCreateViewHolder方法中,根据布局类型来创建对应的ViewHolder。对于反向布局类型,你可以创建一个自定义的ViewHolder,并在其中对item进行反向布局。
  5. 在onBindViewHolder方法中,根据位置和布局类型来绑定数据到ViewHolder。对于反向布局类型,你可以根据位置的倒序来获取数据,并将其绑定到ViewHolder上。
  6. 在RecyclerView的布局文件中,将RecyclerView的布局方向设置为垂直方向,并添加一个垂直方向的LinearLayoutManager。
  7. 在Activity或Fragment中,实例化RecyclerView,并设置适配器。
  8. 当需要更新数据时,调用适配器的notifyDataSetChanged方法。这将触发RecyclerView重新绘制,并根据新的数据进行布局和显示。

总结: 在notifyDataSetChanged上的反向布局RecyclerView中不需要的滚动,可以通过创建一个适配器,为每个item指定不同的布局类型,并在适配器中对反向布局类型进行处理。然后,在RecyclerView的布局文件中设置垂直方向的LinearLayoutManager,并在Activity或Fragment中实例化RecyclerView并设置适配器。最后,当需要更新数据时,调用适配器的notifyDataSetChanged方法即可。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

recycleview优化_recyclerview原理

RecyclerView (以及其他基于adapterview,比如ListView、GridView等)使用了缓存机制重用子 view(即系统只将屏幕可见范围之内元素保存在内存滚动时候不断重用这些内存已经存在...具体实现方式是: RecyclerView 开始一个滚动时new Runnable对象,根据 layout manager 和滚动方向预取即将进入视野条目,可以同时取出一个或多个条目,例如在使用...具体实现原理可参考:RecyclerView预加载机制源码分析 完成这些工作基本没有任何代价,因为 UI 线程两帧之间空隙不做任何工作。...7.2 复用RecycledViewPool TabLayout+ViewPager+RecyclerView场景,当多个RecyclerView有相同item布局结构时,多个RecyclerView...2)每次打开界面都是定位在RecyclerView屏幕顶端,列表上面的布局都被顶上去了 RecyclerView抢占了焦点,自动滚动导致.

3.8K21

RecyclerView 性能优化

优化方案1:关于点击事件 RecyclerView尽量onCreateViewHolder()设置点击事件,而不在onBindViewHolder()设置点击事件。...优化方案2:RecyclerView嵌套布局 嵌套布局(竖则滚动 + 局部横向滚动),可以在内部嵌套RecyclerView设置LinearLayoutManager.setInitialPrefetchItemCount...(int count) setInitialPrefetchItemCount() 只在线性布局才有这个函数,且在内部嵌套RecyclerView设置才有效。...优化方案2:RecyclerView局部刷新 notifyDataSetChanged() : 一个常用数据刷新方法,所有数据全部刷新,性能较低,可以局部刷新情况下不建议使用该函数。...notifyItemChanged(int position): 刷新指定postion位置数据(需要准确知道变化数据postion) DiffUtil: 查找新/旧 数据差异,然后执行差异变化

45120

RecyclerView 必知必会

但是RecyclerView出现会让很多开源项目被废弃,例如横向滚动ListView, 横向滚动GridView, 瀑布流控件,因为RecyclerView能够实现所有这些功能。...但事实很多时候,我们只是更新了其中一个Item数据,其他Item其实可以不需要重绘。 这里给出ListView实现局部更新方法: ?...animatePersistence(): 没调用notifyItemChanged()和notifyDataSetChanged()情况下布局发生改变时被调用。...这些方法内部实际并不是书写执行动画代码,而是将需要执行动画Item全部存入成员变量,并且返回值为true,然后runPendingAnimations()中一并执行。...: 缓存屏幕View,该缓存里View不需要调用getView()。

4.1K90

RecyclerView 必知必会

但是RecyclerView出现会让很多开源项目被废弃,例如横向滚动ListView, 横向滚动GridView, 瀑布流控件,因为RecyclerView能够实现所有这些功能。...但事实很多时候,我们只是更新了其中一个Item数据,其他Item其实可以不需要重绘。 这里给出ListView实现局部更新方法: ?...animatePersistence(): 没调用notifyItemChanged()和notifyDataSetChanged()情况下布局发生改变时被调用。...这些方法内部实际并不是书写执行动画代码,而是将需要执行动画Item全部存入成员变量,并且返回值为true,然后runPendingAnimations()中一并执行。...: 缓存屏幕View,该缓存里View不需要调用getView()。

2.5K70

RecyclerView使用_recyclerview是什么

布局管理器 线性布局管理器 网格布局管理器 ItemDecoration Item 动画 Item 点击 RecyclerView使用-高级篇(拉刷新下拉加载更多) 第一步:添加依赖 第二步:布局文件...第三步:逻辑代码 完整代码 RecyclerView概述 RecyclerView是官方5.0之后新添加控件,推出用来替代传统ListView和GridView列表控件。...全家桶1年46,售后保障稳定 第二步:添加布局文件 布局文件activity_main.xml先添加RecyclerView控件 <?...Item点击 效果如下: RecyclerView使用-高级篇(拉刷新下拉加载更多) 通常RecyclerView使用时候需要配合上拉刷新下拉加载更多功能 我们通过开源控件SmartRefreshLayout...activity_main.xmlSmartRefreshLayout控件将RecyclerView包裹起来 <?

1.3K31

EditTextRecyclerView解决方案

有时候,一个列表Item会有EditText出现,而由于View复用机制,如果不好好处理EditText,将会出现一些问题。...菜是原罪 EditTextRecyclerView问题 例子是这样,每个Item包含一个title、一张图片以及一个评分,这个评分就是通过输入框来输入。...先看下效果如下: 这里,每张图片输入图片title对应分数,可以看到,由于未绑定数据和RecyclerView复用机制存在,一些图片中还没输入分数,就已经出现分数了。...首先我是试了一个,removeTextWatcher方法,那就是AdapterdetachViewHolderFromWindow方法移除TextWatcher,如下: class PicAdapter...很简单,updateView(),也就是bind过程每次去更新PicItem就可以了。

2.7K20

浅谈RecyclerView性能优化

RecyclerView回收原理 (1)如果是RecyclerView滚动情况下缓存(比如删除item)、重新布局时。...把屏幕ViewHolder与屏幕分离下来,存放到Scrap,即发生改变ViewHolder缓存到mChangedScrap,不发生改变ViewHolder存放到mAttachedScrap...(2)如果是RecyclerView滚动情况下缓存(比如滑动列表),滑动时填充布局。 先移除滑出屏幕item,第一级缓存mCachedViews优先缓存这些ViewHolder。...这是因为setAdapter会直接清空RecyclerView所有缓存,但是swapAdapter会将RecyclerViewViewHolder保存到pool,这样当数据源相似时,就可以提高缓存复用率...其他 以上都是针对RecyclerView缓存机制展开优化方案,其实还有几种方案可供参考。 1.取消不需要item动画。

1.7K10

图文讲解RecyclerView复用机制 ||Recyclerview进阶

本文会分析两个问题: RecyclerViewView是什么时候放入到Recycler。以及Recycler是如何保存。...其实在上一篇文章Recycler刷新机制,LinearLayoutManager确定好布局锚点View之后就会把当前attachRecyclerView子View全部设置为scrap状态: void...,LinearLayoutManager布局时如何复用mAttachedScrap集合ViewHolder。...情形三 : 滚动复用 这个情形分析是情形二基础向下滑动时ViewHolder复用情况以及RecyclerViewHolder保存情况, 如下图: ?...在前一篇文章RecyclerView刷新机制中分析过,RecyclerView滑动时会调用LinearLayoutManager.fill()方法来根据滚动距离来向RecyclerView填充子View

1.7K30

Android无限循环RecyclerView完美实现方案

背景 项目中要实现横向列表无限循环滚动,自然而然想到了RecyclerView,但我们常用RecyclerView是不支持无限循环滚动,所以就需要一些办法让它能够无限循环。...方法里对position参数取余运算,拿到position对应真实数据索引,然后对itemView绑定数据 最后,初始化RecyclerView时候,让其滑动到指定位置,如 Integer.MAX_VALUE...方案2 自定义LayoutManager,修改RecyclerView布局方式 这个算得上是一劳永逸解决方案了,也是我今天要详细介绍方案。...} } onLayoutChildren() 方法顾名思义,就是对所有的 itemView 进行布局,一般会在初始化和调用 Adapter notifyDataSetChanged() 方法时调用...4.对RecyclerView进行滚动和回收itemView处理 对RecyclerView子item进行排版布局后,运行一下效果就会出现了,不过这时候我们滑动列表会发现滑动后变成空白了,所以就该对滑动操作进行处理了

4.6K20

Android仿微信朋友圈点击评论自动定位到相关行功能

这个实现起来其实很简单,咱们就来看看吧 最简单RecyclerView 依然是先实现RecyclerView。...跟朋友圈一样,我们也把头给加上去,这样我们点第一条信息时候,效果会更好一些 信息内容简单些,反正我们就看看效果 <?xml version="1.0" encoding="utf-8"?...输入框产生 这里有一个关键地方,如何将EditText悬浮在键盘上,并且RecyclerView不会被挤上去。这里我们可以使用Dialog,同时布局要使用ScrollView来进行占位 <?...列表滚动 输入框也有了,这时候就差滚动了。我们可以通过smoothScrollBy来让RecyclerView按X或者Y轴进行滚动。那我们这里到底应该滚动多少距离才对呢?,咱们来计算一下吧 ?...这样黄色顶部与红色顶部中间区域高度,就是RecyclerView需要滚动数值这样就好办了,我们使用getLocationOnScreen去获取差值,再加上评论区域高度就行了 fun showInputComment

1.5K60

RecyclerView优化实战指南

Android 开发RecyclerView 是一个非常常用组件,用于展示大量数据。然而,如果不进行优化,RecyclerView 可能会导致 UI 卡顿、内存泄漏等问题。...它可以自动回收不可见视图,并且可以使用不同布局管理器来实现不同布局RecyclerView 还提供了一些回调函数,允许你视图复用时进行一些自定义操作。...我们可以 adapter_layout.xml 中使用 标签,将数据绑定到视图布局文件,从而减少代码量。...减少布局嵌套层级 布局嵌套层级越多,性能就越低,所以需要尽可能减少嵌套层级。可以使用 ConstraintLayout 或者扁平布局来减少嵌套层级。 7....设置 Recyclerview 固定大小 Recyclerview 布局,设置 android:layout_height 和 android:layout_width 值为具体数值,可以避免列表项宽高随着内容变化而变化

46720

Linux 系统手动滚动日志方法

日志滚动log rotation Linux 系统是再常见不过一个功能了,它为系统监控和故障排查保留必要日志内容,同时又防止过多日志造成单个日志文件太大。...这一个过程很容易就可以实现自动化,细节还能按需作出微调。 使用 logrotate 命令可以手动执行日志滚动操作。本文将要介绍就是手动进行日志滚动方法,以及预期产生结果。...日志滚动过程,活动日志会以一个新名称命名,例如 log.1,之前被命名为 log.1 文件则会被重命名为 log.2,依此类推。...,无论发生日志滚动是自动滚动还是手动滚动,最近一次滚动时间都会记录在 logrorate 状态文件。...$ grep wtmp /var/lib/logrotate/status "/var/log/wtmp" 2020-3-12-11:52:57 总结 到此这篇关于 Linux 系统手动滚动日志文章就介绍到这了

2.4K21

Android:让你明明白白使用RecyclerView——SnapHelper详解

RecyclerView然后松手,RecyclerView内容会顺着惯性继续往手指滑动方向继续滚动直到停止,这个过程叫做Fling。...onFling()方法判断当前方向上速率是否足够做滚动操作,如果速率足够大就调用snapFromFling()方法实现滚动相关逻辑。...layoutManager很灵活,有两种布局方式(横向布局和纵向布局),每种布局方式有两种布局方向(正向布局反向布局)。...这个方法计算targetPosition时候把布局方式和布局方向都考虑进去了。...两端,但是无法直接确定哪个起点哪个终点(因为有正反向布局) //所以取两者起点坐标小那个作为起点坐标 //终点坐标的取值一样道理 int start

5.5K40
领券