错误摘要
在EditText在RecyclerView中被回收之后,它的长新闻行为(用于选择所有文本,并显示上下文菜单“剪切/复制/粘贴”)不再像预期的那样工作。
这个问题从Android 15到Android 28都会出现。
我试过EditText和android.support.v7.widget.AppCompatEditText。两者都会产生同样的问题。
我可以确认这个问题是在View被回收后发生的。如果我将setIsRecyclable(false);应用于ViewHolder,则不会出现此问题。
复制步骤
EditText长篇新闻。我们可以确认EditText中的所有文本都将被选中。将显示上下文菜单。RecyclerView直到列表的末尾。RecyclerView直到列表开始。EditText长篇新闻。EditText中的所有文本都不会被选中。将不会显示上下文菜单。预期行为
在视图被回收之后,我们预计步骤4的行为仍然与步骤1完全相同。
源代码
问题跟踪器
https://issuetracker.google.com/issues/125425940
我在想,有没有人遇到和我一样的问题?你有什么好办法解决这个问题吗?注意,我需要我的RecyclerView项目是可循环利用的。因此,对我来说,使用setIsRecyclable(false);不是一种选择。
发布于 2019-02-23 10:55:32
简而言之,之所以会出现这个问题,是因为EditText在attachToWindow期间没有执行Editor#prepareCursorControllers。
因为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://stackoverflow.com/questions/54833004
复制相似问题