在 RecyclerView 中回收视图后,长按会损坏 EditText(或 android.support.v7.widget.AppCompatEditText)

2024-05-04

Bug总结

After EditText正在被回收RecyclerView,其用于选择所有文本并显示上下文菜单“剪切/复制/粘贴”的长按行为不再按预期工作。

从 Android 15 到 Android 28 都会出现此问题。

我都尝试过EditText and android.support.v7.widget.AppCompatEditText。两者都会产生同样的问题。

我可以确认此问题发生后View正在被回收。如果我申请setIsRecyclable(false); in ViewHolder,则不会出现该问题。


重现步骤

  1. 长按1号EditText。我们可以确认所有文本EditText将被选中。将显示上下文菜单。
  2. Scroll RecyclerView直到列表末尾。
  3. Scroll RecyclerView直到列表的开头。
  4. 长按1号EditText。所有文字都在EditText不会被选中。将不会显示上下文菜单。

预期行为

视图被回收后,我们期望步骤 4 的行为仍然与步骤 1 完全相同。


源代码

https://github.com/yccheok/edittext_bug_in_android9 https://github.com/yccheok/edittext_bug_in_android9


问题跟踪器

https://issuetracker.google.com/issues/125425940 https://issuetracker.google.com/issues/125425940


我想知道,有人遇到和我一样的问题吗?您对此有什么好的解决方法吗?请注意,我需要我的RecyclerView物品可回收。因此,使用setIsRecyclable(false);对我来说不是一个选择。


简而言之,问题的发生是因为EditText不执行Editor#prepareCursorControllers during attachToWindow.

Since Editor#prepareCursorControllers不是公共可访问函数,我们可以使用间接调用它setCursorVisible.

edtImgDesc.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
     @Override
     public void onViewAttachedToWindow(View v) {
         edtImgDesc.setCursorVisible(false);
         edtImgDesc.setCursorVisible(true);
     }

     @Override
     public void onViewDetachedFromWindow(View v) {
     }
 });

参考来源:https://www.jianshu.com/p/e334134a4ef7 https://www.jianshu.com/p/e334134a4ef7(博客为中文)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 RecyclerView 中回收视图后,长按会损坏 EditText(或 android.support.v7.widget.AppCompatEditText) 的相关文章

随机推荐

  • valgrind 检测到分离 pthread 的数据争用

    我正在创建两个detached线程 pthread attr t tha1 void fun1 void return 0 void fun2 void return 0 int main pthread t th1 th2 pthread
  • Common Lisp——为什么这个符号不是外部的?

    我正在尝试在 ASDF 中运行测试 如下所示 foo asd defsystem foo tests depends on foo fiveam components module tests components file main pe
  • delphi中生成随机数

    我想在delphi中创建一个随机数并将其分配给文件作为文件名 我设法做到了这一点 但是当我单击按钮生成数字时 它总是以 0 开头 知道如何修复它 procedure TForm1 Button1Click Sender TObject va
  • 在 AIX 中启动 C++ 可执行文件时出错

    在我们的应用程序从 HP 迁移到 AIX 的过程中 我遇到了一个独特的问题 以下模拟代码在 HP 和 AIX 中产生不同的结果 是的 即使您不打算调用代码 不使用 库函数仍然可能是一个错误 它可以将某些组件的加载推迟到稍后 因此它可能不会导
  • 序列化文件类型 jQuery

    我正在尝试使用序列化我的表单数据 包括文件图像字段jquery form jsjQuery API 该 API 正在帮助我序列化数据字段 包括图像并返回图像对象 object file 这是我的序列化代码 var data js form
  • 使用 R 从 Microsoft Outlook 发送电子邮件时的 Html 表输出格式

    我正在尝试使用以下方法将数据框转换为 html 表htmlTable打包 然后使用 Microsoft Outlook 作为电子邮件客户端发送电子邮件RDCOMClient通过附加 html 表作为电子邮件正文来进行打包 我是 HTML 编
  • 为什么android SQLite可以将双精度值(java 8字节)存储到float列中

    Create Table db execSQL CREATE TABLE PERSONS TABLE PersonsColumns ID INTEGER PRIMARY KEY AUTOINCREMENT PersonsColumns HE
  • 由于辅助功能设置而未检测到 iOS 手势

    我正在开发的应用程序需要三点滑动手势 我已经成功地实现了这个使用UIGestureRecognizer大多数情况下它工作得很好 但是 如果您打开设备的 缩放 辅助功能设置 设置 gt 常规 gt 辅助功能 gt 缩放 则会停止识别该手势 缩
  • 具有重复名称的 WSDL — 如何强制 Java 类名称

    背景 我们正在开发一个与多个第三方网络服务通信的应用程序 遗憾的是 其中一个使用糟糕的命名约定定义了 WSDL 文件 响应元素及其使用的复杂类型经常重复使用相同的名称 下面的代码片段显示了这样一个例子
  • 在注释处理器中获取字段类

    我正在编写我的第一个注释处理器 并且遇到了一些看似微不足道的问题 但我找不到有关它的任何信息 我有一个用我的注释注释的元素 MyAnnotation String property 当我将此属性作为处理器中的元素获取时 我似乎无法以任何方式
  • 使用 React 更新关于 props 变化的 C3 图表

    我试图在数据更改时美化作为 React 组件编写的 C3 图表的更新 数据通过父组件的 props 流向组件 我现在拥有的解决方案 有效 但似乎并不是最优的 当新数据进入时 整个图表都会重新生成 我想过渡到新状态 线条移动而不是整个图表眨眼
  • 如何在 UIStackView 中垂直和水平居中

    I have a simple UIImageView with 50x50 size If I had a UIView of size 100x100 and I wanted to center the image inside of
  • 如何以编程方式滚动面板

    我有一个System Windows Forms Panel有一些内容 我正在尝试以编程方式向上或向下滚动面板 垂直 我尝试过设置AutoScrollPosition属性为新的Point在面板上 但这似乎并没有做到这一点 我有AutoScr
  • UIView的setNeedsLayout、layoutIfNeeded和layoutSubviews之间有什么关系?

    谁能对两者之间的关系给出明确的解释UIView s setNeedsLayout layoutIfNeeded and layoutSubviews方法 以及一个使用所有三个的示例实现 谢谢 让我感到困惑的是 如果我将自定义视图发送给set
  • 带填充零的十六进制格式

    将整数类型格式化为十六进制字符串时 我无法让它用零填充数字 println 4x 0x0001 as u16 gt 0x1 but expected 0x0001 println 02x 0x0001 as u16 gt 0x1 same
  • Angular js中两个$scope数组的区别

    有没有办法返回 angularjs 范围内存在的两个数组之间的差异 例如 scope user1 a b scope user2 a b c d 这两者的区别应该给我另一个 scope user3 c d Underscore js对此有不
  • 使用主题函数在 body 标记后插入代码

    我试图在开头添加一段代码everyDrupal 站点中的页面 因为我有不止一个page模板 我想以编程方式执行此操作 但没有成功 我还是个新手 虽然我了解了钩子 主题函数等的要点 但我只是想不出实现这一目标的正确方法 到目前为止我已经覆盖了
  • R data.frame 从另一个变量选择的变量中获取值,向量化

    我收到的数据包含许多类似的变量 还有一个附加变量指示哪些变量one我真正想要的那些类似的变量 使用循环我可以查找正确的值 但是数据很大 循环很慢 而且看起来这应该是可矢量化的 我只是还没弄清楚怎么做 编辑 所选变量将用作同一数据框中的新变量
  • SwiftUI - 正确使用 @available() 和 #available

    我在下面的代码中遗漏了什么吗 此应用程序在 iOS 15 设备上构建 macOS Monterey b5 Xcode 13 b5 并完美执行 但在 iOS 14 7 设备上导致 SIGABRT import SwiftUI struct C
  • 在 RecyclerView 中回收视图后,长按会损坏 EditText(或 android.support.v7.widget.AppCompatEditText)

    Bug总结 After EditText正在被回收RecyclerView 其用于选择所有文本并显示上下文菜单 剪切 复制 粘贴 的长按行为不再按预期工作 从 Android 15 到 Android 28 都会出现此问题 我都尝试过Edi