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);
} `
大佬牛批,我也遇到这个崩溃了,学习一波!
@zombiu @wzhangmoumou 请问 isDeletable 这个值是怎么判断的
https://github.com/zombiu/Study_Demo/blob/master/Study_RichText/mentions/src/main/java/com/bobomee/android/mentions/edit/listener/MentionInputConnection.java 我根据大佬的思路,做了一下拦截!
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()); 这个地方崩溃,请问您那边会这样吗
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()); 这个地方崩溃,请问您那边会这样吗
不会,这个功能已经上线几个月了,从来没出现过相关崩溃。
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。
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。
我这边复现不了丫,不能复现,我也不知道咋整!
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。
我这边复现不了丫,不能复现,我也不知道咋整! 我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。 https://github.com/andydevacc/MentionEditText/issues/4
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。
我这边复现不了丫,不能复现,我也不知道咋整! 我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。 andydevacc/MentionEditText#4
你那边改了能修复吗,要是可以的话,你就这样修改吧!
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。
我这边复现不了丫,不能复现,我也不知道咋整! 我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。 andydevacc/MentionEditText#4
你那边改了能修复吗,要是可以的话,你就这样修改吧!
我这样是可以的,暂时没有发现其他问题。感谢您的回复!
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。
我这边复现不了丫,不能复现,我也不知道咋整! 我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。 andydevacc/MentionEditText#4
你那边改了能修复吗,要是可以的话,你就这样修改吧!
我这样是可以的,暂时没有发现其他问题。感谢您的回复!
报的是Fatal Exception: java.lang.IllegalArgumentException这个错误么,我仔细检查了下崩溃情况,有一例崩溃跟你发出来的类似!
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。
我这边复现不了丫,不能复现,我也不知道咋整! 我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。 andydevacc/MentionEditText#4
你那边改了能修复吗,要是可以的话,你就这样修改吧!
我这样是可以的,暂时没有发现其他问题。感谢您的回复!
报的是Fatal Exception: java.lang.IllegalArgumentException这个错误么,我仔细检查了下崩溃情况,有一例崩溃跟你发出来的类似!
就是这个错误。我留一下联系方式这样聊太麻烦了QQ:1538800174
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。
我这边复现不了丫,不能复现,我也不知道咋整! 我翻到的最开始项目的issues,他是将setSelection(closestRange.from,closestRange.to);这个方法中的值互换了一下位置,您可以试一下看看。 andydevacc/MentionEditText#4
你那边改了能修复吗,要是可以的话,你就这样修改吧!
我这样是可以的,暂时没有发现其他问题。感谢您的回复!
报的是Fatal Exception: java.lang.IllegalArgumentException这个错误么,我仔细检查了下崩溃情况,有一例崩溃跟你发出来的类似!
就是这个错误。我留一下联系方式这样聊太麻烦了QQ:1538800174
谢谢大佬回复,加你了!