Mentions icon indicating copy to clipboard operation
Mentions copied to clipboard

当edittext文字太多时,并且包含话题时,长按键盘删除按钮删除太快导致崩溃问题解决

Open wzhangmoumou opened this issue 4 years ago • 13 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);

} `

wzhangmoumou avatar Sep 29 '19 09:09 wzhangmoumou