我在Samsung Galaxy S5和Note 3和4上收到了IndexOutOfBoundsException。它没有引用我的代码。有没有遇到过这个?我在这里找不到任何东西。
在尝试长按EditText以粘贴内容时,似乎偶尔会发生这种情况。
编辑:
我正在使用一个简单的EditText字段(不在ListView或Spinner中)。有一个约28个字符的提示。我通过clearFocus
几次切换焦点,我正在使用setOnEditorActionListener
和setOnFocusChangeListener
控制将片段附加到活动。
编辑#2:
我已经能够通过长按EditText来尝试粘贴某些东西来成功地重现它。它只发生在EditText中已有文本的情况下,我长按文本右侧,而不是文本右侧。此外,EditText必须没有焦点。
通过创建自定义EditText并覆盖某些方法的任何可能的解决方案?
java.lang.IndexOutOfBoundsException: setSpan (11 ... 11) ends beyond length 0
at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1024)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:594)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:590)
at android.text.Selection.setSelection(Selection.java:116)
at android.text.Selection.setSelection(Selection.java:127)
at android.widget.Editor.performLongClick(Editor.java:1008)
at android.widget.TextView.performLongClick(TextView.java:10637)
at android.view.View$CheckForLongPress.run(View.java:19482)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5678)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)
代码:
editText.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
String searchText = v.getText().toString();
FragmentSearchList fragmentSearchList = (FragmentSearchList) getChildFragmentManager().findFragmentByTag(FRAGMENT_SEARCH_LIST_TAG);
if(fragmentSearchList != null){
fragmentSearchList.executeSearch(searchText);
}
return true;
}
});
editText.setOnFocusChangeListener(new OnFocusChangeListener(){
@Override
public void onFocusChange(View view, boolean hasFocus) {
if(hasFocus){
FragmentManager fragmentManager = getChildFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag(FRAGMENT_SEARCH_LIST_TAG);
if(fragment == null){
editText.setText(null);
FragmentSearchList fragmentSearchList = FragmentSearchList.newInstance();
FragmentTransaction fragmentSearchListTransaction = fragmentManager.beginTransaction();
fragmentSearchListTransaction.add(R.id.viewGroupFragmentSearchListContainer, fragmentSearchList, FRAGMENT_SEARCH_LIST_TAG);
fragmentSearchListTransaction.addToBackStack(null);
fragmentSearchListTransaction.commit();
}
}
else{
if(!isRemovingOrPartOfRemovalChain()){
editText.setText(mAreaName);
getChildFragmentManager().popBackStack();
}
}
}
});
public boolean isRemovingOrPartOfRemovalChain(){
if(isRemoving()){
return true;
}
Fragment fragment = this.getParentFragment();
if(fragment != null){
if(((MainFragment)fragment).isRemovingOrPartOfRemovalChain()){
return true;
}
else{
return false;
}
}
else{
return(this.getActivity().isFinishing());
}
}