首页
学习
活动
专区
工具
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.你可以通过观察上级沟通方式与决策方式来了解他风格。曾经辅导过一位客户向我抱怨,他和他领导之间关系一直不太融洽,后来双方发现,这是因为彼此决策风格不一样。

65320

给我 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 分钟,添加语音只能是即时录音。一个收藏页面中可以添加多个视频和语音。 编辑好收藏页面后,点击右上角「…」即可分享到朋友圈。...比如对爱范儿招聘长文进行编辑,除了已经提到置入图片和语音功能,还可以加粗小标题,添加项目符号以及地理位置等: 编辑完成后,点击右上角「…」选择「保存为图片」后就能将自动将长图保存到手机相册中。

    78830

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

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

    1.7K30

    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.2K20

    是一个垃圾

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

    27110

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

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

    3.8K12

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

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

    47850

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

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

    66710

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

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

    56220

    一文告诉你,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

    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.5K40

    JAVA NIO Buffer

    Java默认字节序是大端序,系统无关性,ByteBuffer.order() 总是范围ByteOrder.BIG_ENDIAN。...直接缓冲区=》通道 非直接缓冲区=》临时直接缓冲区=》IO=》临时直接缓冲区回收。 选择依据执行频率,高频脚本使用直接缓存区。...创建直接缓冲区是调用本地操作系统分配内存,比基于JVM创建基于堆栈缓冲区更加耗费,所以也不会被回收管理。 先使其工作,再加快其运行。首先注重正确性。过早优化是所有祸害根源。...视图缓冲区: 通过已有的缓冲区对象示例工厂方法来创建。视图缓冲维护自己属性、容量、位置、上界和标记,但是和原来缓冲区共享数据元素。...如,ByteBuffer类允许创建视图来将byte型缓冲数组转化为其它原始类型,ByteBuffer.asLongBuffer()。

    62520
    领券