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://github.com/yccheok/edittext_bug_in_android9
https://issuetracker.google.com/issues/125425940
我想知道,有人遇到和我一样的问题吗?您对此有什么好的解决方法吗?请注意,我需要我的RecyclerView
项目是可回收的。因此,使用setIsRecyclable(false);
对我来说不是一种选择。
答案 0 :(得分:2)
简而言之,发生问题是因为EditText
在Editor#prepareCursorControllers
期间没有执行attachToWindow
。
由于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(博客为中文)