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

我的回收视图位置总是给我"-1“

回收视图(RecyclerView)是Android开发中用于展示大量数据列表的一个组件,它通过重用已经滑出屏幕的视图来提高性能。如果你发现回收视图的位置总是返回"-1",这通常意味着在尝试获取其位置时出现了问题。

基础概念

回收视图的位置信息是通过LayoutManager来管理的。LayoutManager负责计算每个可见项的位置,并且提供了方法来查询特定视图的位置。

可能的原因

  1. 视图尚未附加到窗口:如果你在视图还没有完全加载和显示时就尝试获取其位置,可能会得到"-1"。
  2. 错误的视图引用:你可能尝试获取一个不在回收视图中的视图的位置。
  3. 异步问题:如果你在异步操作中获取位置,而此时视图的状态已经发生了变化,也可能导致获取到错误的位置。

解决方法

  1. 确保视图已经加载:在尝试获取位置之前,确保回收视图已经完成了布局过程。你可以使用View.post()方法来延迟获取位置的操作,直到视图已经附加到窗口并且布局完成。
代码语言:txt
复制
recyclerView.post(new Runnable() {
    @Override
    public void run() {
        View view = recyclerView.getChildAt(0); // 获取第一个可见的子视图
        if (view != null) {
            int position = recyclerView.getChildAdapterPosition(view);
            Log.d("RecyclerView", "Position: " + position);
        }
    }
});
  1. 检查视图引用:确保你获取位置的视图确实是回收视图的子视图。
  2. 同步问题:如果你在异步操作中需要获取位置,确保在正确的时机进行,或者使用回调机制来处理异步结果。

应用场景

回收视图广泛应用于需要展示大量数据列表的场景,如新闻列表、商品列表、社交媒体动态等。它特别适合于数据量较大且需要频繁更新的应用。

参考链接

如果你遵循以上步骤仍然无法解决问题,可能需要进一步检查你的代码逻辑,或者查看是否有其他因素影响了回收视图的正常工作。

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

相关·内容

在工作时,领导总是给我安排额外的工作打乱我,怎么办?

— 1 — 学会向上管理 1.这个问题的本质是如何更好地进行向上管理,如何在与你的领导建立和谐关系的同时,实现你的影响力。 2.一定要主动和领导建立固定的沟通机制,这是你们建立长久信任的基础。...比如,你可以和领导每1-2周进行一次沟通,每次30分钟,向他同步你手头有哪些工作,并请领导对你的工作进行重要性的排序,从而和团队目标和谐统一。...我曾经辅导过一个刚入职场两年做数据分析的毕业生,她的领导经常让她给自己贴发票。我发现她对本职工作不感兴趣,反而一直对行政管理特别向往。...于是,我问她,是否可以将贴发票这件事做得更科学、更有趣,并且和行政管理建立起联系呢?...7.你可以通过观察上级的沟通方式与决策方式来了解他的风格。我曾经辅导过的一位客户向我抱怨,他和他的领导之间的关系一直不太融洽,后来双方发现,这是因为彼此的决策风格不一样。

68020

给我 O(1) 时间,我能查找删除数组中的任意元素

: 1、插入,删除,获取随机元素这三个操作的时间复杂度必须都是 O(1)。...对数组尾部进行插入和删除操作不会涉及数据搬移,时间复杂度是 O(1)。 所以,如果我们想在 O(1) 的时间删除数组中的某一个元素val,可以先把这个元素交换到数组的尾部,然后再pop掉。...至此,这道题就解决了,每个操作的复杂度都是 O(1),且随机抽取的元素概率是相等的。...避开黑名单的随机数 有了上面一道题的铺垫,我们来看一道更难一些的题目,力扣第 710 题,我来描述一下题目: 给你输入一个正整数N,代表左闭右开区间[0,N),再给你输入一个数组blacklist,其中包含一些...pick函数: int pick() { // 随机选取一个索引 int index = rand() % sz; // 这个索引命中了黑名单, // 需要被映射到其他位置

1.4K10
  • 失敬,我的微信语音总是比一般人多 1 秒 | 晓技巧

    是我的表情,谁也拿不走 相信不少人的联系列表里有用这样的透明头像和透明昵称的好友。...看了这个视频你了解两种透明表情的区别了吗?接下来我们简单为大家讲解一下如何把透明图片制作成表情: 1....在「我」页面选择「收藏」,点击收藏页面右上角的加号即可进入新建收藏页面,在这个页面中,我们可以添加相册图片、视频、语音、位置、待办事项等。点击打开相册图片,就可以选择视频进行添加了。...值得一提的是,可添加的视频每个不能超过 5 分钟,添加的语音只能是即时录音。一个收藏页面中可以添加多个视频和语音。 编辑好收藏页面后,点击右上角的「…」即可分享到朋友圈。...比如对爱范儿招聘长文的进行编辑,除了已经提到的置入图片和语音功能,还可以加粗小标题,添加项目符号以及地理位置等: 编辑完成后,点击右上角的「…」选择「保存为图片」后就能将自动将长图保存到手机相册中。

    79530

    G1回收器:我怎么知道你是什么时候的垃圾?

    因为他们被标记成了黑色,所以逃过了本次垃圾回收。 什么?你问我为什么黑色就不回收了?你个假粉丝,建议你先去读一读上周的推文。 ? G1垃圾回收时新对象怎么处理?...初识Garbage First(G1) 我不知道你是怎么知道G1的,但是我是从周志明大大的《深入理解Java虚拟机(第2版)》这本书里面第一次知道G1收集器的。...我记得当时读到G1的时候感觉这就是天书啊。 因为作者在介绍G1之前介绍了很多其他的收集器,我先给你看一下目录,带你回顾回顾: ?...我让上面的图片动起来,请你细细品。 请注意各个阶段 PrevTAMS 、 NextTAMS 指针的交换、 PrevBitmap 和 NextBitmap 位置的交换: ?...才疏学浅,难免会有纰漏,如果你发现了错误的地方,还请你留言给我指出来,我对其加以修改。 感谢您的阅读,我坚持原创,十分欢迎并感谢您的关注。

    1.8K30

    Fragment 重叠 遮盖问题 完美解决

    1.导致Fragment 重叠 和遮盖的原因  主要还是因为Fragment的状态保存机制,当系统内存不足时,Fragment的主Activity被回收,Fragment的实例并没有随之被回收。...Activity被系统回收时,会主动调用onSaveInstance()方法来保存视图层(View Hierarchy),所以当Activity通过导航再次被重建时,之前被实例化过的Fragment依然会出现在...而且我在onResume()发现之前的Fragment只是被移除,并不是空,所以就算你在onResume()中执行问题一中创建的Fragment的方法,同样无济于事。...对于这句话的解释是“Always call the superclass so it can save the view hierarchy state”,大概意思是“总是执行这句代码来调用父类去保存视图层的状态...其实到这里大家也就明白了,就是因为这句话导致了重影的出现,于是我删除了这句话,然后onCreate()与onRestoreInstanceState()中同时使用问题一中的创建Fragment方法,然后再通过保存切换的状态

    1.3K20

    我是一个垃圾

    第1回 诞生 我诞生在伊甸园(我的主人更喜欢叫它Eden区),名字很不错对吧?充满了原始浪漫的气息。 我并没有见过亚当和夏娃,相反,在这里,我目睹了无数同伴的消逝。...我们的位置依然固定,我和她之间隔了好几个人,所以说话声音不免需要提高一些。 我问她,发生了什么事。 “可能发生了传说中的Minor GC了,听说当园子空间不够了,回收者会回收园子里没用的对象。”...第3回 帝国的走狗 之后,他又给我讲了很多,尤其是每次面对回收者Serial的故事。 Serial是Minor GC的掌管者,我问他,除了Minor GC还有其他的GC吗?...他说他不知道,因为他从来没有去过传说中的老年代。 令我不解的是,每当说起Serial,他的眼神里有光,不是仇恨,而是着迷。他尊称Serial为回收者,而我总是背地里叫它帝国走狗,因为这他也没少说我。...CMS收集器 大叔还想给我继续给我解释,让一个濒死之人向别人介绍自己的死亡方式未免过于残忍,我打断了他,让他好好休息。

    27510

    Unity基础教程系列(新)(五)——计算着色器(Rendering One Million Cubes)

    如果我们的视图在播放模式下被禁用或破坏,则该对象有可能在下次运行时被Unity的内存垃圾回收进程回收。 ? 如果我们不明确释放缓冲区会发生什么?...当垃圾回收器回收该对象时,如果没有任何引用保留该对象,则它将最终被释放。但是何时发生这种情况是任意的。最好尽快将其明确释放,以免阻塞内存。...例如,(64,1,1)给我们一个维上的64个线程,而(8,8,1)给我们一个相同的数量,但表示为2D 8×8正方形网格。在基于2D UV坐标定义点时,我们使用后一个选项。 ?...(带有Pragmas的着色器视图) 使用Point URP GPU着色器创建启用了实例化的材质,将其分配给视图,然后进入播放模式。现在,我在编辑器和内部版本中都达到了36FPS,并且启用了阴影。...2.6 可变的分辨率 因为我们当前总是在缓冲区中的每个位置绘制一个点,所以在播放模式下降低分辨率会固定一些点。发生这种情况是因为compute shader仅更新适合视图的点。 ?

    3.9K12

    Java基础系列(三十八):集合总览

    的子接口(视图是什么,我们后面会讲到)。...但是我个人认为 Map并不能说是一个集合,称之为映射或许更为合适,因为它的 KeySet视图是一个 Set类型的键集,所以我们姑且把它也当做集合。...Collection继承了 Iterator接口,而 Iterator的作用是给我们提供一个只能向后遍历集合元素的迭代器,也就是说所有实现 Collection的类都可以使用 Iterator遍历器去遍历...:一种其值无用武之地后可以被垃圾回收期回收的映射表 IdentityHashMap:一种用==而不是用equals比较键值的映射表 Vector:目前使用较少,因为设计理念的陈旧和性能的问题被ArrayList...通过调用 next()方法可以逐个的去访问集合中的每个元素,而访问元素的顺序跟该容器的数据结构有关,比如 ArrayList就是按照索引值开始,每次迭代都会使索引值加1,而对于HashSet这种数据结构是散列表的集合

    48050

    简述JVM基础(二):Java内存区域与内存溢出异常

    一、概述 我们在进行Java开发的时候,很少关心Java的内存分配等等,因为这些活都让JVM给我们做了。不仅自动给我们分配内存,还有自动的回收无需再占用的内存空间,以腾出内存供其他人使用。...1、程序计数器 线程私有 当前线程所执行的字节码的行号指示器 Java多线程是通过再一个内核中轮流执行实现的,计数器就保证了切换线程的时候可以回到原来正确的执行位置 程序计数器必须每个线程单独一个,是线程私有的内存区域...自身运行时数据 GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID 类型指针:确定对象是哪个Class的实例 实例数据 存储有效信息,定义的各种字段 相同宽度的字段总是被分配到一起 对齐填充 不一定存在...动态定义大量的Class,需要注意内存的回收情况。 六、小结 程序运行时,需要不停的将数据在内存中分配、计算等。JVM将不同类型的数据放在不同的位置,这样分工才能够让程序有序的跑起来。...故,在程序运行的时候,我们通过栈来保存该线程自由的局部变量、引用等,通过程序计数器保存了各个线程的执行位置。这样,在线程切换的时候,才能找到自己的上一次执行位置,继续完成未完成的工作。

    67610

    java中byte的用法_澄清池的工作原理

    大家好,又见面了,我是你们的朋友全栈君。 缓冲区在计算机世界中随处可见,内存中的多级缓冲区,io设备的缓冲区等等,还有我们经常用的内存队列,分布式队列等等。...另一方面,”set” 、 “get”操作字节将不会移动索引位置,它们只会在指定的相对位置上操作字节。可以给ByteBuf指定一个最大容量值,这个值限制着ByteBuf的容量。...复合缓冲区 COMPOSITE BUFFER 复合缓冲区是多个ByteBuf组合的视图,复合缓冲区就像一个列表,我们可以动态的添加和删除其中的 ByteBuf,JDK的 ByteBuffer 没有这样的功能...注意:CompositeByteBuf只是一个视图,CompositeByteBuf.hasArray() 总是返回 false,因为它可能既包含堆缓冲区,也包含直接缓冲区。...为了减少内存的分配回收以及产生的内存碎片,Netty提供了PooledByteBufAllocator用来分配可回收的ByteBuf,可以把PooledByteBufAllocator看做一个池子,需要的时候从里面获取

    56920

    一文告诉你,Intellij IDEA神器隐藏的11种实用小技巧!

    作者:Sam哥哥聊技术 原文链接:https://my.oschina.net/samgege/blog/1808622 Intellij IDEA真是越用越觉得它强大,它总是在我们写代码的时候,不时给我们来个小惊喜...1、我最爱的【演出模式】 我们可以使用【Presentation Mode】,将IDEA弄到最大,可以让你只关注一个类里面的代码,进行毫无干扰的coding。...可以使用alt+1把鼠标焦点定位到project视图里,然后直接使用ctrl+shift+左右箭头来移动分割线。...7、把鼠标定位到project视图里 当工程里的包和类非常多的时候,有时候我们想知道当前类在project视图里是处在哪个位置。 ?...可以先使用alt+F1,弹出Select in视图,然后选择Project View中的Project,回车,就可以立刻定位到类的位置了。 ? 那如何从project跳回代码里呢?

    1K20

    MySQL ibdata1共享表空间

    如图中看到的,在视图 A、B、C 里面,这一个记录的值分别是 1、2、4,同一条记录在系统中可以存在多个版本,就是数据库的多版本并发控制(MVCC)。...(ibdata1文件不会自动收缩)我见过数据只有 20GB,而回滚段有 200GB 的库。最终只好为了清理回滚段,重建整个库。...因此,我会建议你总是使用 set autocommit=1, 通过显式语句的方式来启动事务。但是有的开发同学会纠结“多一次交互”的问题。... grep UNDO_LOG | wc -l19272五、有什么方法可以回收已使用的ibdata1空间呢?...没有,目前还没有一个容易并且快速的方法去释放ibdata1空间。当你删除一些行,这个页被标为已删除稍后重用,但是这个空间从不会被回收。

    10310

    iOS开发——定制UITextField

    键盘的收起 首先我们先来看UITextField的键盘弹出和回收,UITextField在默认的情况下,键盘在输入完成后是不会自动回收的,这里我们讲解如何在按下Return键时,键盘自动回收。...可是placeholde的默认属性是紧贴文本输入框的,而且字体以及字体大小也不美观,于是我们可以这么来设置placeholder //控制placeHolder的位置,左右缩20 -(CGRect)placeholderRectForBounds...:(CGRect)bounds { return CGRectInset(bounds, 20, 4); } //控制左视图位置 - (CGRect)leftViewRectForBounds...的位置之后,我们也要相应的调整文本显示的位置,以及在编辑完成后,文本显示在输入框的位置。...,系统也给我们提供了一些常用的类型 typedef NS_ENUM(NSInteger, UIReturnKeyType) { UIReturnKeyDefault, UIReturnKeyGo

    1.6K40
    领券