当edittext文字太多时,并且包含话题时,长按键盘删除按钮删除太快导致崩溃问题解决
wzhangmoumou opened this issue · comments
测试过程中发现在华为和vivo上级上出现这个问题,小米手机上没事。
出现问题的原因是,达到快速删除的时候,vivo手机上会一次删除两个字符,华为手机上就***
贴上解决代码,直接修改MentionInputConnection类sendKeyEvent就可以
` private int lastStart=-1;
private int lastend=-1;
@OverRide public boolean sendKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DEL) {
if (null != mRangeManager) {
int selectionStart = mEditText.getSelectionStart();
int selectionEnd = mEditText.getSelectionEnd();
if (lastStart==selectionStart && lastend==selectionEnd){
return true;
}
Range closestRange =
mRangeManager.getRangeOfClosestMentionString(selectionStart, selectionEnd);
if (closestRange == null) {
mEditText.setSelected(false);
if (selectionStart>0) {
mEditText.getEditableText().delete(selectionStart - 1, selectionEnd);
return true;
}else {
mEditText.setSelected(false);
return super.sendKeyEvent(event);
}
}
//if mention string has been selected or the cursor is at the beginning of mention string, just use default action(delete)
if (mEditText.isSelected() || selectionStart == closestRange.getFrom()) {
mEditText.setSelected(false);
lastStart=selectionStart;
lastend=selectionEnd;
return super.sendKeyEvent(event);
} else {
//select the mention string
if (isDeletable) {//可以删除,否则不进行处理
mEditText.setSelected(true);
mRangeManager.setLastSelectedRange(closestRange);
setSelection(closestRange.getTo(), closestRange.getFrom());
}
}
return true;
}
}
return super.sendKeyEvent(event);
}
`
大佬牛批,我也遇到这个崩溃了,学习一波!
@zombiu @wzhangmoumou 请问 isDeletable 这个值是怎么判断的
我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗
我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗
不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗
不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
这个截图是我用您的demo在我手机上测试的,也是相同的问题。我使用的手机 oppo A3 Android版本:10。
我这边复现不了丫,不能复现,我也不知道咋整!
我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。
andydevacc/MentionEditText#4
我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗
不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
这个截图是我用您的demo在我手机上测试的,也是相同的问题。我使用的手机 oppo A3 Android版本:10。
我这边复现不了丫,不能复现,我也不知道咋整!
我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。
andydevacc/MentionEditText#4
你那边改了能修复吗,要是可以的话,你就这样修改吧!
我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗
不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
这个截图是我用您的demo在我手机上测试的,也是相同的问题。我使用的手机 oppo A3 Android版本:10。
我这边复现不了丫,不能复现,我也不知道咋整!
我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。
andydevacc/MentionEditText#4你那边改了能修复吗,要是可以的话,你就这样修改吧!
我这样是可以的,暂时没有发现其他问题。感谢您的回复!
我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗
不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
这个截图是我用您的demo在我手机上测试的,也是相同的问题。我使用的手机 oppo A3 Android版本:10。
我这边复现不了丫,不能复现,我也不知道咋整!
我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。
andydevacc/MentionEditText#4你那边改了能修复吗,要是可以的话,你就这样修改吧!
我这样是可以的,暂时没有发现其他问题。感谢您的回复!
报的是Fatal Exception: java.lang.IllegalArgumentException这个错误么,我仔细检查了下崩溃情况,有一例崩溃跟你发出来的类似!
我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗
不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
这个截图是我用您的demo在我手机上测试的,也是相同的问题。我使用的手机 oppo A3 Android版本:10。
我这边复现不了丫,不能复现,我也不知道咋整!
我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。
andydevacc/MentionEditText#4你那边改了能修复吗,要是可以的话,你就这样修改吧!
我这样是可以的,暂时没有发现其他问题。感谢您的回复!
报的是Fatal Exception: java.lang.IllegalArgumentException这个错误么,我仔细检查了下崩溃情况,有一例崩溃跟你发出来的类似!
我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗
不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
这个截图是我用您的demo在我手机上测试的,也是相同的问题。我使用的手机 oppo A3 Android版本:10。
我这边复现不了丫,不能复现,我也不知道咋整!
我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。
andydevacc/MentionEditText#4你那边改了能修复吗,要是可以的话,你就这样修改吧!
我这样是可以的,暂时没有发现其他问题。感谢您的回复!
报的是Fatal Exception: java.lang.IllegalArgumentException这个错误么,我仔细检查了下崩溃情况,有一例崩溃跟你发出来的类似!
谢谢大佬回复,加你了!