首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在EditText (或android.support.v7.widget.AppCompatEditText)视图在RecyclerView中回收后,长时间按坏

问在EditText (或android.support.v7.widget.AppCompatEditText)视图在RecyclerView中回收后,长时间按坏
EN

Stack Overflow用户
提问于 2019-02-22 18:22:33
回答 1查看 151关注 0票数 3

错误摘要

在EditText在RecyclerView中被回收之后,它的长新闻行为(用于选择所有文本,并显示上下文菜单“剪切/复制/粘贴”)不再像预期的那样工作。

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

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

我可以确认这个问题是在View被回收后发生的。如果我将setIsRecyclable(false);应用于ViewHolder,则不会出现此问题。

复制步骤

  1. 1 EditText长篇新闻。我们可以确认EditText中的所有文本都将被选中。将显示上下文菜单。
  2. 滚动RecyclerView直到列表的末尾。
  3. 滚动RecyclerView直到列表开始。
  4. 第一台EditText长篇新闻。EditText中的所有文本都不会被选中。将不会显示上下文菜单。

预期行为

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

源代码

android9

问题跟踪器

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

我在想,有没有人遇到和我一样的问题?你有什么好办法解决这个问题吗?注意,我需要我的RecyclerView项目是可循环利用的。因此,对我来说,使用setIsRecyclable(false);不是一种选择。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-23 10:55:32

简而言之,之所以会出现这个问题,是因为EditText在attachToWindow期间没有执行Editor#prepareCursorControllers。

因为Editor#prepareCursorControllers不是一个公共访问函数,所以我们可以使用setCursorVisible间接地调用它。

代码语言:javascript
复制
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 (博客有中文)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54833004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档