在 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) 的相关文章

  • Android 中用虚拟键盘捕捉按键按下的情况?

    使用物理键盘 您可以使用按键监听器 http developer android com reference android text method KeyListener html 就像是 myEditText setOnKeyListe
  • Android 上有哪些字体可用? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道安卓有一个字体集合 http www ascenderfonts com store search
  • v7 RecyclerView NullPointerException AccessibilityDelegateCompat.getBridge()

    运行我的 recyclerview 列表片段时出现此错误 java lang NullPointerException Attempt to invoke virtual method java lang Object android su
  • 在 Anko DSL 中创建自定义 View/ViewGroup 类

    我想创建一个自定义视图 它只是一些 Android 视图的包装 我考虑创建一个自定义 ViewGroup 来管理其子视图的布局 但我不需要这么复杂 我基本上想做的是 class MainActivity verticalLayout tex
  • android webview 函数 onPagefinished 被调用两次

    我的android webview功能onPageFinished被调用两次 我不知道为什么 但它在 android 2 2 上运行良好 但当我将其升级到 4 时 它就不起作用了 代码附在下面 Code Override public vo
  • 如何获取.so文件的依赖项列表?

    假设我有libFoo so为 android arm 编译 我不确定它链接到什么STL实现 有options http developer android com intl ru ndk guides standalone toolchai
  • ProGuard 无法与 Windows 中使用的 Joda Time 一起编译

    实际上 这是一个答案 而不是一个问题 我确实在 Windows 上花了很多时间 使用 JodaTime 并使用 ProGuard 将其包含在我的 Android 项目中 混淆器配置 libraryjars C Users Reto Docu
  • FileNotFoundException:/存储/模拟/0/Android

    我尝试这个文件写入器 读取器代码段进行测试 File file new File Environment getExternalStorageDirectory LM lm lisdat 01 txt FileOutputStream ou
  • 如何从一个代码库创建多个 Android 应用

    我有一个 Android 代码库 它使用带有设置的 API 来获取多个应用程序的不同数据 所有应用程序都使用相同的代码库 但进行一两个设计调整 那么如何重用主代码库而不必每次都复制整个 Android 项目呢 iPhone 在同一个项目中使
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • 如何强制从本机代码打开 Android 软键盘?

    我有一个游戏 当用户触摸屏幕时 它使用从 C 到 Java 的回调来强制打开软键盘 Java代码很简单是这样的 this inputMethodManager toggleSoftInput InputMethodManager SHOW
  • finish() 完成活动但它仍然在后台

    我有一个关于 android studio 中活动的 finish 方法的问题 我有这个简单的代码 public class MainActivity extends AppCompatActivity Override protected
  • 如何持续更新MPAndroidChart中的Y轴值

    我希望 LineChart 中的轴能够实时调整其最大值和最小值 当新数据的 Y 值增加 正值和负值 时 像 ResetAxisMaxValue 和 ResetAxisMinValue 这样的函数可以很好地工作 但是 一旦信号再次变低 Y 值
  • Android Studio - 值必须 ≥ 0

    我在 Android Studio 中收到与光标有关的错误 我的代码中有以下行 String data cursor getString cursor getColumnIndex columnIndex columnIndex 被传递到该
  • JavaDoc 在 Android 项目中不起作用

    我在 Ubuntu 10 04 上使用 Eclipse 3 5 2 进行 Android 开发 我安装了 来自 Ubuntu 存储库的 Sun JDK Eclipse 3 5 2 经典 来自 eclipse org 解压到 opt ecli
  • Android - 如何更改 TimePicker 中的文本颜色?

    我正在使用 TimePicker 到 LinearLayout 中 背景颜色 黑色 但是 我看不到 TimePicker 中的数字 并且我需要在布局中将背景颜色设置为黑色 如何更改 TimePicker 中的 textColor 我已经尝试
  • onBackPressed 隐藏 不破坏 Activity

    我知道如何取消后退按键 以便活动 主窗口保持可见 public void onBackPressed return 我的目标是隐藏该活动 但是 在没有完成它的情况下 您如何在 onBackPressed 事件中做到这一点 即我想达到 onP
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文
  • 按字母顺序过滤 Firestore 数据以对 Google Cloud 中的文档读取进行分类/减少

    基于这样的事实Cloud Firestore 不支持全文搜索 https firebase google com docs firestore solutions search到目前为止 我决定问这个question https stack

随机推荐

  • 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