Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
wzhangmoumou opened this issue Sep 29, 2019 · 13 comments

Comments

@wzhangmoumou
Copy link

wzhangmoumou commented Sep 29, 2019

测试过程中发现在华为和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
Copy link

zombiu commented May 7, 2021

大佬牛批,我也遇到这个崩溃了,学习一波!

@wht007
Copy link

wht007 commented Jul 20, 2021

@zombiu @wzhangmoumou 请问 isDeletable 这个值是怎么判断的

@wht007
Copy link

wht007 commented Jul 20, 2021

https://github.com/zombiu/Study_Demo/blob/master/Study_RichText/mentions/src/main/java/com/bobomee/android/mentions/edit/listener/MentionInputConnection.java
我根据大佬的思路,做了一下拦截!

我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗

@zombiu
Copy link

zombiu commented Jul 20, 2021

https://github.com/zombiu/Study_Demo/blob/master/Study_RichText/mentions/src/main/java/com/bobomee/android/mentions/edit/listener/MentionInputConnection.java
我根据大佬的思路,做了一下拦截!

我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗

不会,这个功能已经上线几个月了,从来没出现过相关崩溃。

@wht007
Copy link

wht007 commented Jul 20, 2021

https://github.com/zombiu/Study_Demo/blob/master/Study_RichText/mentions/src/main/java/com/bobomee/android/mentions/edit/listener/MentionInputConnection.java
我根据大佬的思路,做了一下拦截!

我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗

不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
这个截图是我用您的demo在我手机上测试的,也是相同的问题。我使用的手机 oppo A3 Android版本:10。
56F4BC40-22A1-43FE-97CE-A44265734FBC

@zombiu
Copy link

zombiu commented Jul 20, 2021

https://github.com/zombiu/Study_Demo/blob/master/Study_RichText/mentions/src/main/java/com/bobomee/android/mentions/edit/listener/MentionInputConnection.java
我根据大佬的思路,做了一下拦截!

我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗

不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
这个截图是我用您的demo在我手机上测试的,也是相同的问题。我使用的手机 oppo A3 Android版本:10。
56F4BC40-22A1-43FE-97CE-A44265734FBC

我这边复现不了丫,不能复现,我也不知道咋整!

@wht007
Copy link

wht007 commented Jul 20, 2021

https://github.com/zombiu/Study_Demo/blob/master/Study_RichText/mentions/src/main/java/com/bobomee/android/mentions/edit/listener/MentionInputConnection.java
我根据大佬的思路,做了一下拦截!

我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗

不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
这个截图是我用您的demo在我手机上测试的,也是相同的问题。我使用的手机 oppo A3 Android版本:10。
56F4BC40-22A1-43FE-97CE-A44265734FBC

我这边复现不了丫,不能复现,我也不知道咋整!
我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。
andydevacc/MentionEditText#4

@zombiu
Copy link

zombiu commented Jul 20, 2021

https://github.com/zombiu/Study_Demo/blob/master/Study_RichText/mentions/src/main/java/com/bobomee/android/mentions/edit/listener/MentionInputConnection.java
我根据大佬的思路,做了一下拦截!

我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗

不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
这个截图是我用您的demo在我手机上测试的,也是相同的问题。我使用的手机 oppo A3 Android版本:10。
56F4BC40-22A1-43FE-97CE-A44265734FBC

我这边复现不了丫,不能复现,我也不知道咋整!
我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。
andydevacc/MentionEditText#4

你那边改了能修复吗,要是可以的话,你就这样修改吧!

@wht007
Copy link

wht007 commented Jul 20, 2021

https://github.com/zombiu/Study_Demo/blob/master/Study_RichText/mentions/src/main/java/com/bobomee/android/mentions/edit/listener/MentionInputConnection.java
我根据大佬的思路,做了一下拦截!

我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗

不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
这个截图是我用您的demo在我手机上测试的,也是相同的问题。我使用的手机 oppo A3 Android版本:10。
56F4BC40-22A1-43FE-97CE-A44265734FBC

我这边复现不了丫,不能复现,我也不知道咋整!
我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。
andydevacc/MentionEditText#4

你那边改了能修复吗,要是可以的话,你就这样修改吧!

我这样是可以的,暂时没有发现其他问题。感谢您的回复!

@zombiu
Copy link

zombiu commented Jul 20, 2021

https://github.com/zombiu/Study_Demo/blob/master/Study_RichText/mentions/src/main/java/com/bobomee/android/mentions/edit/listener/MentionInputConnection.java
我根据大佬的思路,做了一下拦截!

我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗

不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
这个截图是我用您的demo在我手机上测试的,也是相同的问题。我使用的手机 oppo A3 Android版本:10。
56F4BC40-22A1-43FE-97CE-A44265734FBC

我这边复现不了丫,不能复现,我也不知道咋整!
我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。
andydevacc/MentionEditText#4

你那边改了能修复吗,要是可以的话,你就这样修改吧!

我这样是可以的,暂时没有发现其他问题。感谢您的回复!

报的是Fatal Exception: java.lang.IllegalArgumentException这个错误么,我仔细检查了下崩溃情况,有一例崩溃跟你发出来的类似!

@wht007
Copy link

wht007 commented Jul 21, 2021

https://github.com/zombiu/Study_Demo/blob/master/Study_RichText/mentions/src/main/java/com/bobomee/android/mentions/edit/listener/MentionInputConnection.java
我根据大佬的思路,做了一下拦截!

我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗

不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
这个截图是我用您的demo在我手机上测试的,也是相同的问题。我使用的手机 oppo A3 Android版本:10。
56F4BC40-22A1-43FE-97CE-A44265734FBC

我这边复现不了丫,不能复现,我也不知道咋整!
我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。
andydevacc/MentionEditText#4

你那边改了能修复吗,要是可以的话,你就这样修改吧!

我这样是可以的,暂时没有发现其他问题。感谢您的回复!

报的是Fatal Exception: java.lang.IllegalArgumentException这个错误么,我仔细检查了下崩溃情况,有一例崩溃跟你发出来的类似!

39235C0C-05FF-4E1E-8E56-C2D70EB5F2FA
就是这个错误。我留一下联系方式这样聊太麻烦了QQ:1538800174

@zombiu
Copy link

zombiu commented Aug 6, 2021

https://github.com/zombiu/Study_Demo/blob/master/Study_RichText/mentions/src/main/java/com/bobomee/android/mentions/edit/listener/MentionInputConnection.java
我根据大佬的思路,做了一下拦截!

我试了一下,删除的时候还是在 setSelection(closestRange.getTo(), closestRange.getFrom()); 这个地方崩溃,请问您那边会这样吗

不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
这个截图是我用您的demo在我手机上测试的,也是相同的问题。我使用的手机 oppo A3 Android版本:10。
56F4BC40-22A1-43FE-97CE-A44265734FBC

我这边复现不了丫,不能复现,我也不知道咋整!
我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。
andydevacc/MentionEditText#4

你那边改了能修复吗,要是可以的话,你就这样修改吧!

我这样是可以的,暂时没有发现其他问题。感谢您的回复!

报的是Fatal Exception: java.lang.IllegalArgumentException这个错误么,我仔细检查了下崩溃情况,有一例崩溃跟你发出来的类似!

39235C0C-05FF-4E1E-8E56-C2D70EB5F2FA
就是这个错误。我留一下联系方式这样聊太麻烦了QQ:1538800174

谢谢大佬回复,加你了!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants