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

如何在RecyclerView的Adapter本身中获得之前的位置?

在RecyclerView的Adapter本身中获得之前的位置,可以通过以下步骤实现:

  1. 在Adapter中定义一个成员变量来保存之前的位置。可以使用一个整型变量来存储位置值。
  2. 在Adapter的构造函数中初始化之前的位置变量。可以将其设置为RecyclerView.NO_POSITION,表示初始状态下没有之前的位置。
  3. 在Adapter的getItemCount()方法中返回数据集合的大小。
  4. 在Adapter的onBindViewHolder()方法中,将当前位置保存到之前的位置变量中。可以使用holder.getAdapterPosition()方法获取当前位置。
  5. 在需要获取之前位置的地方,可以直接访问之前的位置变量。

下面是一个示例代码:

代码语言:txt
复制
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private List<String> mData;
    private int mPreviousPosition = RecyclerView.NO_POSITION;

    public MyAdapter(List<String> data) {
        mData = data;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // 创建ViewHolder
        // ...
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        // 绑定数据到ViewHolder
        // ...

        // 保存当前位置到之前的位置变量
        mPreviousPosition = holder.getAdapterPosition();
    }

    @Override
    public int getItemCount() {
        return mData.size();
    }

    public int getPreviousPosition() {
        return mPreviousPosition;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        // ViewHolder的定义
        // ...
    }
}

在需要获取之前位置的地方,可以调用getPreviousPosition()方法来获取之前的位置。

这种方法可以在Adapter本身中保存之前的位置,并且不依赖于RecyclerView的特定方法或属性。

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

相关·内容

如何从Bash脚本本身获得其所在目录

问: 如何从Bash脚本本身获得其所在目录? 我想使用Bash脚本作为另一个应用程序启动器。我想把工作目录改为Bash脚本所在目录,以便我可以对该目录下文件进行操作,像这样: $ ....但是在以相对路径方式去执行脚本时,获取目录信息是相对路径,不能满足其他需要获取绝对路径场景。 如果要获取绝对路径,可以使用如下方法: #!...)]" echo "dirname : [$(dirname $(realpath "$0") )]" 参考: stackoverflow question 59895 相关阅读: 在shell编程$...(cmd) 和 `cmd` 之间有什么区别 为什么我不能在脚本中使用"cd"来更改目录 为什么在可执行文件或脚本名称之前需要..../(点-斜杠),以便在bash运行它 shell脚本对编码和行尾符敏感吗

33720

RecyclerView获取点击位置接口被废弃了?

几乎和之前RecyclerView用法没有任何区别。 现在运行一下程序,效果如下图所示: ?...如果这时,我想要监听BodyAdapter中元素点击事件,那么调用getAdapterPosition()方法,获得到底是BodyAdapter中元素点击位置,还是合并之后元素点击位置呢?...从名字上就可以看出来了,一个是用于获取元素位于当前绑定Adapter位置,一个是用于获取元素位于Adapter绝对位置。 如果觉得我上面的解释还不够清楚,通过下面的示例看一下你立马就能明白了。...很明显,我们获取到点击位置是元素位于BodyAdapter位置。...结果一目了解,获取到点击位置是元素位于合并后Adapter位置

4.4K43
  • 何在keras添加自己优化器(adam等)

    2、找到keras在tensorflow下根目录 需要特别注意是找到keras在tensorflow下根目录而不是找到keras根目录。...一般来说,完成tensorflow以及keras配置后即可在tensorflow目录下python目录中找到keras目录,以GPU为例keras在tensorflow下根目录为C:\ProgramData...找到optimizers.pyadam等优化器类并在后面添加自己优化器类 以本文来说,我在第718行添加如下代码 @tf_export('keras.optimizers.adamsss') class...# 传入优化器名称: 默认参数将被采用 model.compile(loss=’mean_squared_error’, optimizer=’sgd’) 以上这篇如何在keras添加自己优化器...(adam等)就是小编分享给大家全部内容了,希望能给大家一个参考。

    45K30

    AndroidApp和车机开发:RecyclerView实现触摸和拖放功能

    引言 在现代应用程序,用户交互性是提供丰富用户体验关键因素。RecyclerView作为Android处理列表和网格布局强大组件,支持多种交互,包括拖放排序。...本文指导您如何在RecyclerView实现拖放功能,使用户能够通过长按和拖动来重新排序列表项,用Kotlin实现 长按和拖放操作 为了为RecyclerView添加长按拖放功能,我们将通过自定义ItemTouchHelper.Callback...函数 在适配器实现 moveItem 函数,用于交换数据集中元素位置,通知 RecyclerView 更新: 比较源位置和目标位置。...使用Collections.swap交换元素在列表位置。 调用notifyItemMoved通知RecyclerView元素已移动。...结语 通过上述步骤,可以轻松地在Android应用RecyclerView实现拖放排序功能。 谢谢大家阅读,如果您觉得这篇文章对您有所帮助,请给我点赞和支持,非常感谢: )

    24720

    RecyclerView技术栈参考资料:

    当然,在这之前,我要声明是:RecyclerView 是Support Library一部分。...不过,视图回收本身并不是什么新鲜事。但是回想之前我们写ListView,无论从它性能表现着手,还是语法书写,甚至数据绑定都未免略显臃肿。...相反地,在RecyclerView必须自定义实现RecyclerView.Adapter并为其提供数据集合。...Android团队很早之前就推荐使用“ViewHolder设计模式”,但实际上他们并没有把这种概念强加给开发者,而且也没有要求开发者在Adapter必须使用ViewHolder pattern。...,我们可以通过以下代码为Item增加动画效果: recyclerView.setItemAnimator(new DefaultItemAnimator()); 在之前版本,当时据集合发生改变时,我们通过调用

    1.2K10

    Android Jetpack系列——DataBinding 最佳实践

    DataBinding里注解方法讲解 在正式介绍 Binding adapters 之前,我们先了解一下 DataBinding 里注解方法。 @Bindable 用于数据更新自动刷新视图。...以上只是一个简单使用,还有更厉害! 那就是配合RecyclerView设置adapter。...RecyclerView可以说是我们最常用一个控件,如果吧adapter和DataBinding结合之后,你会发现写Adapter会变得十分简单! 更多属性,都可以在xml当中完成。...="@{adapter}" app:layoutManager="LinearLayoutManager"/> 通过上面的方式,我们就实现了通过在RecyclerView配置属性达到为adapter...这里值得注意是: 其中app:adapter="@{adapter}"是因为RecyclerView有setAdapter方法,结合databinding特性,故而可以这样写。

    1.9K40

    Android面试之3个RecycleView经典面试题

    面试题目1:如何在RecyclerView实现局部刷新?...解答: 在RecyclerView,可以通过调用AdapternotifyItemChanged(int position, Object payload)方法实现局部刷新,其中payload参数用于指定具体需要更新控件或数据...实现步骤: 1、 调用局部刷新方法: 使用notifyItemChanged(int position, Object payload)方法来通知RecyclerView某个位置数据发生了变化。...2、 在Adapter处理局部刷新: 在AdapteronBindViewHolder方法,通过检查payloads参数来区分是进行整个项全量更新还是仅更新特定控件。...8、 内存优化: 针对Adapter一样两个列表,共享一个RecyclerViewPool以提高性能。 面试题目3:如何在RecyclerView实现预加载?

    12610

    RecyclerView必知必会

    这里给出ListView实现局部更新方法: 可以看出,我们通过ListViewgetChildAt()来获得需要更新View,然后通过getTag()获得ViewHolder,从而实现更新。...标准用法 RecyclerView标准实现步骤如下: 创建Adapter:创建一个继承RecyclerView.AdapterAdapter类(VH是ViewHolder类名),记为NormalAdapter...首先看构造函数,构造函数获得系统属性android:listDivider,该属性是一个Drawable对象。...更方便,你只需要关注动画本身。...那么如何在不破坏原有Adapter实现情况下完成呢? 这里引入装饰器(Decorator)设计模式,该设计模式通过组合方式,在不破话原有类代码情况下,对原有类功能进行扩展。

    4.7K20

    使用 ConcatAdapter 顺序连接其他 Adapter

    △ 一个带有底部 RecyclerView,底部显示了加载状态: 加载进度或错误信息 ConcatAdapter 简介 ConcatAdapter 让我们可以顺序显示多个 Adapter 内容。...要获得完整实现,请查看这里 拉取请求,它添加了: 从 ViewModel 暴露出来 LoadState 显示加载状态头部和底部布局 头部和底部 ViewHolder 对象 一个 ListAdapter...其中后面两种需要您自己处理 Adapter stable id。您可以查看 StableIdMode 文档来获得更多关于其工作原理信息。...数据变更通知 当 ConcatAdapter 一个 Adapter 调用了通知函数时,ConcatAdapter 会在更新 RecyclerView 之前计算新项目位置。...查找 ViewHolder 位置 您可能使用过 ViewHolder.getAdapterPosition 来获得 Adapter 某个 ViewHolder 位置

    70820

    RecyclerView 必知必会

    可以看出,我们通过ListViewgetChildAt()来获得需要更新View,然后通过getTag()获得ViewHolder,从而实现更新。...其中关键点在于通过SparseArray存储item view控件,getView(int id)功能就是通过id获得对应View(首先在mViews查询是否存在,如果没有,那么findViewById...首先看构造函数,构造函数获得系统属性android:listDivider,该属性是一个Drawable对象。 因此如果要设置,则需要在value/styles.xml设置: ?...更方便,你只需要关注动画本身。...那么如何在不破坏原有Adapter实现情况下完成呢? 这里引入装饰器(Decorator)设计模式,该设计模式通过组合方式,在不破话原有类代码情况下,对原有类功能进行扩展。

    4.2K90

    何在WebStorm获得对数据库工具和SQL支持

    虽然我们没有将数据库插件与 WebStorm 捆绑在一起,但早就有办法通过购买DataGrip或所有产品包订阅来获得里面的数据库和 SQL 支持,这将允许你安装数据库插件并在 WebStorm 中使用它...从 v2020.2 开始,你可以订阅我们数据库插件,并在 WebStorm 以合理价格使用它。 如何试用该插件 要安装插件,请转至“首选项/设置” |“设置”。...单击搜索结果“Database tools and SQL”插件旁边“Install”按钮,然后重新启动 IDE。 接下来,系统将提示你激活许可证。如果你已经有一个,你可以在那里直接激活它。...你从数据库插件得到什么 安装了数据库插件后,你就可以使用 DataGrip 所有功能,DataGrip 是我们独立数据库 IDE。 ?...为你在 WebStorm 项目提供类似的编码协助。 多种导入和导出数据选项。 如果你想了解更多有关可用功能信息,请访问此网页,你也可以查看DataGrip 博客,以了解最新改进和新闻。

    3.8K30

    实现一个带有header和footer功能RecyclerView

    RecyclerView是Android 5.0版本引入一个新组件,目的是在一些场景取代之前ListView和GridView,实现性能更优解决方案。...如果是正常item,直接调用外部adapter对应方法;如果是header和footer,在对应标识上要减去该header或footer在对应list位置,下面就会解释这样做原因。...type,同时如果是header或footer还需要知道是哪一个,这就是前面代码在type添入位置原因。...同理,在findViewHolderForAdapterPostion,我们想通过外部adapteritempostion获取该itemViewHolder。...普通item,由于需要判断是否是一行最后一个isEnd(在GridLayoutManager或StaggeredGridLayoutManager),所以要排除掉header对item位置影响,

    1.7K20

    Android开发笔记(一百二十二)循环器视图RecyclerView

    循环适配器 RecyclerView有专门适配器类,即RecyclerView.Adapter。...下面是与RecyclerView.Adapter相关常用方法: 下面是自定义适配器必须要重写方法: getItemCount : 获得列表项数目。...总的来说,RecyclerView.Adapter与我们之前经常遇到BaseAdapter在处理流程上是基本一致,当然它们之间也有不小差异,下面是RecyclerView.Adapter和其他适配器主要区别...方法,界面就会根据新布局刷新列表项,这个特性特别适合于手机在竖屏/横屏之间显示切换(竖屏时展示ListView,横屏时展示GridView),也适合在不同屏幕分辨率手机/平板之间显示切换(手机上展示...之前我们要想实现瀑布流效果,都得自定义控件或者借助于第三方开源库StaggeredGridView、PinterestLikeAdapterView等等;现在Android在support-v7库推出了

    2.4K20

    BRAVH源码模拟

    简介 BRAVH是一个recyclerViewadapter,能够快速适配多种类型adapter,可定制,用的人挺多,下面我们就来分析分析他源码,模拟来写一个我们adapter。...代表当前位置contentview是新,需要开启动画,否则如果AnimOnce只要一次,不开启动画,因为动画已经之前被加载过,我们可以这样实现: ?...这部分也可以直接用原生ItemTouchHelper,复写onMove实现item交换,onSwiped实现Item删除 我们开始写交换逻辑: 首先剔除header视图位置获得在datas数据集中位置...下面我们实现删除逻辑: 首先剔除header视图位置获得在datas数据集中位置realpos 删除数据集中realpos位置数据 NotifyItemRemoved ?...扩展与折叠也是属于自定义数据类型一种,但是要求传入数据集类型T还有T类型子集合,用来得到子集,这样可以保持与Adapter 数据类型一直,用于展开删除其实就是对Adapter数据集datas

    95090

    Android Paging库使用详解(小结)

    这些实例也提供了在应用引用RecyclerView适配器....在一些情况下, 比如使用Spinner实例时候, 你仅仅提供了Adapter本身. 然后一个库使用了加载进adapter数据, 并展示了数据....在这些情况下, 把adapter数据类型转化为LiveData<PagedList , 之后在尝试使用将这些数据项在UI填充起来之前, 将这个列表在ArrayAdapter对象包裹起来....占位符本身表达了这个信息. 在添加占位符支持之前, 请牢记以下先置条件: 要求集合数据可数. 来自Room持久化库DataSource实例能够高效地计算数据项....如果你需要从数据商店任意位置拉取分页数据的话, 使用PositionalDataSource. 这个类支持请求任意位置开始数据集. 比如, 请求也许返回从位置1200开始20条数据.

    2.1K30

    Android开发之漫漫长途 XV——RecyclerView

    布局管理器LayoutManager控制 你想要控制Item间间隔(可绘制),想自定义更多样式分割线,之前你可以设置divider,那么现在你可以使用RecyclerViewItemDecoration...* 创建ViewHolder:在RecyclerViewDemo1Adapter创建一个继承RecyclerView.ViewHolder静态内部类,记为ViewHolder * (RecyclerView...,实现方法有很多种,也比较容易,本例采用在AdapterBindViewHolder绑定数据时候为item设置了点击事件。...(position, dryRun, FOREVER_NS).itemView; } 跟进tryGetViewHolderForPositionByDeadline /** *试图获得给定位置...下篇预告 下篇呢,也是一篇干货,上面两篇文章,我们数据都是虚拟,静态,而实际开发数据通常都是从服务器动态获得,这也产生了一系列问题,列表下拉刷新以及上拉加载、ListVIew异步获取图片显示错位等等问题

    2.3K20

    恢复 RecyclerView 滚动位置

    您可能在开发过程遇到过这种情况,在 Activity/Fragment 被重新创建后,RecyclerView 丢失了它之前保有的滚动位置信息。...通常这种情况发生原因是由于异步加载 Adapter 数据,且数据在 RecyclerView 需要进行布局时候尚未加载完成,导致 RecyclerView 无法恢复到之前滚动位置。...从  1.2.0-alpha02 版本开始,Jetpack RecyclerView 提供了一个新 API,可以让 Adapter  在数据加载完成之前阻塞布局行为 ,从而避免丢失滚动位置信息。...其中最好一种方法是将数据提前缓存在内存、ViewModel 或 Repository ,然后确保在第一次布局传入之前,将缓存数据设置到 Adapter 中去。...如果根据您项目实际情况无法采用这种方法,那也可以使用其他方法,只是要么比较复杂 (比如避免在 RecyclerView 设置 Adapter,但这样又有可能导致像 header 等 item 显示问题

    1.5K10
    领券