在RecyclerView中回收视图后,EditText(或android.support.v7.widget.AppCompatEditText)长按断开 错误摘要
在在RecyclerView中回收视图后,EditText(或android.support.v7.widget.AppCompatEditText)长按断开 错误摘要,android,android-recyclerview,android-edittext,Android,Android Recyclerview,Android Edittext,在EditText在RecyclerView中被回收后,其用于选择所有文本并显示上下文菜单“剪切/复制/粘贴”的长按行为不再按预期工作 这个问题发生在Android 15到Android 28之间 我尝试了EditText和android.support.v7.widget.appcompatiedittext。两者都会产生相同的问题 我可以确认在回收视图后出现此问题。如果我应用setIsRecyclable(false)在ViewHolder中,不会出现问题 复制步骤 长按第1次编辑文本。我
EditText
在RecyclerView
中被回收后,其用于选择所有文本并显示上下文菜单“剪切/复制/粘贴”的长按行为不再按预期工作
这个问题发生在Android 15到Android 28之间
我尝试了EditText
和android.support.v7.widget.appcompatiedittext
。两者都会产生相同的问题
我可以确认在回收视图
后出现此问题。如果我应用setIsRecyclable(false)
在ViewHolder
中,不会出现问题
复制步骤
EditText
中的所有文本。将显示关联菜单RecyclerView
直到列表结束RecyclerView
直到列表开始预期行为 在视图被回收后,我们希望步骤4的行为仍然与步骤1完全相同
源代码
问题追踪器
我在想,有没有人遇到过和我一样的问题?你有什么好的解决办法吗?注意,我需要我的
RecyclerView
项目是可回收的。因此,使用setIsRecyclable(false)代码>不是我的选择。简而言之,问题的发生是因为EditText
在attachToWindow
过程中不执行Editor#preparecursorcontroller
由于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) {
}
});
参考资料来源:(该博客为中文)