Mentions
Mentions copied to clipboard
当edittext文字太多时,并且包含话题时,长按键盘删除按钮删除太快导致崩溃问题解决
测试过程中发现在华为和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);
} `