在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);
不是我的选择。
简而言之,问题发生是因为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(博客中文)