gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 09:21:28 27 4
gpt4 key购买 nike

错误总结

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

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

我尝试了 EditTextandroid.support.v7.widget.AppCompatEditText。两者都会产生同样的问题。

我可以确认这个问题发生在 View 被回收之后。如果我在 ViewHolder 中应用 setIsRecyclable(false);,就不会出现这个问题。


重现步骤

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

预期行为

在 View 被回收后,我们预计第 4 步的行为仍将与第 1 步完全相同。


源代码

https://github.com/yccheok/edittext_bug_in_android9


问题跟踪器

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


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

最佳答案

简而言之,问题的发生是因为 EditTextattachToWindow 期间没有执行 Editor#prepareCursorControllers

由于 Editor#prepareCursorControllers 不是公共(public)可访问函数,我们可以使用 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 (博客是中文的)

关于android - 在 RecyclerView 中回收 View 后,EditText(或 android.support.v7.widget.AppCompatEditText)长按损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54833004/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com