Error al seleccionar texto de Textview (java.lang.IndexOutOfBoundsException: setSpan (-1 … -1) comienza antes de 0)

Estoy intentando agregar la funcionalidad de la goma de la copia en la opinión del texto. He agregado en el código registerForContextMenu(detailedText); Y también android:textIsSelectable="true" en xml.When estoy tratando de copiar funciona bien, pero cuando se señaló en la primera posición de la vista de texto, y que tratamos de seleccionar el texto que lanza error.which que se muestra a continuación . Cómo puedo resolverlo ? por favor, ayúdame.

XML

  <TextView android:id="@+id/datailtext" android:layout_width="match_parent" android:layout_height="wrap_content" android:textIsSelectable="true" android:layout_below="@+id/EMPTY" android:text="@string/detailed_text" /> 

Error

  04-02 16:54:03.367: E/AndroidRuntime(10977): FATAL EXCEPTION: main 04-02 16:54:03.367: E/AndroidRuntime(10977): Process: com.example.app, PID: 10977 04-02 16:54:03.367: E/AndroidRuntime(10977): java.lang.IndexOutOfBoundsException: setSpan (-1 ... -1) starts before 0 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.text.SpannableStringInternal.checkRange(SpannableStringInternal.java:355) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.text.SpannableStringInternal.setSpan(SpannableStringInternal.java:77) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.text.SpannableString.setSpan(SpannableString.java:46) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.text.Selection.setSelection(Selection.java:76) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.widget.Editor$SelectionEndHandleView.updateSelection(Editor.java:3479) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.widget.Editor$HandleView.positionAtCursorOffset(Editor.java:3167) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.widget.Editor$SelectionEndHandleView.updatePosition(Editor.java:3494) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.widget.Editor$HandleView.onTouchEvent(Editor.java:3260) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.View.dispatchTouchEvent(View.java:7690) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.View.dispatchPointerEvent(View.java:7870) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3919) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3808) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3406) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3456) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3425) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3510) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3433) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3567) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3406) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3456) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3425) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3433) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3406) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5520) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5500) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5471) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5594) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:182) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:174) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5573) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:5613) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.Choreographer.doCallbacks(Choreographer.java:562) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.Choreographer.doFrame(Choreographer.java:530) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.os.Handler.handleCallback(Handler.java:733) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.os.Handler.dispatchMessage(Handler.java:95) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.os.Looper.loop(Looper.java:137) 04-02 16:54:03.367: E/AndroidRuntime(10977): at android.app.ActivityThread.main(ActivityThread.java:4998) 04-02 16:54:03.367: E/AndroidRuntime(10977): at java.lang.reflect.Method.invokeNative(Native Method) 04-02 16:54:03.367: E/AndroidRuntime(10977): at java.lang.reflect.Method.invoke(Method.java:515) 04-02 16:54:03.367: E/AndroidRuntime(10977): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 04-02 16:54:03.367: E/AndroidRuntime(10977): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 04-02 16:54:03.367: E/AndroidRuntime(10977): at dalvik.system.NativeStart.main(Native Method) 

Código de actualización

Bueno, quiero implementar la funcionalidad de copia de copia en la vista de texto Android 2.3, he hecho hasta ahora en código, he detallado below.Any mejor sugerencia para la aplicación en android 2.3? Por favor, ayúdame.

  detailedText.setOnLongClickListener(new OnLongClickListener() { @SuppressLint("NewApi") @Override public boolean onLongClick(View v) { // TODO Auto-generated method stub Log.d("LOG", "Detail text long pressed"); int startIndex = detailedText.getSelectionStart(); int endIndex = detailedText.getSelectionEnd(); Log.d("LOG","startIndex "+ startIndex + "endIndex " + endIndex);///here get index -1 ,-1 for startIndex and endIndex in less than android 4.4 i dont know why? String YouExtracted = stringYouExtracted.substring(startIndex,endIndex); int sdk = android.os.Build.VERSION.SDK_INT; if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setText(detailedText.getText().toString()); } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); android.content.ClipData clip = android.content.ClipData .newPlainText("COPYTEXT", detailedText.getText().toString()); clipboard.setPrimaryClip(clip); } return true; } }); setupSocialNetworkingLinks(); } /*@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { //user has long pressed your TextView menu.add(0, v.getId(), 0, "COPYTEXT"); //cast the received View to TextView so that you can get its text TextView yourTextView = (TextView) detailedText; int startIndex = detailedText.getSelectionStart(); int endIndex = detailedText.getSelectionEnd(); String YouExtracted = detailedText.getText().toString(); //place your TextView's text in clipboard if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setText(YouExtracted); } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); android.content.ClipData clip = android.content.ClipData.newPlainText("COPYING", YouExtracted); clipboard.setPrimaryClip(clip); } } */ 

Es un poco tarde, pero ¿estás usando un LinkMovementMethod personalizado? Descubrí la misma excepción, pero tan pronto como comentar el setCustomMovementMethod, la excepción desaparece.

No sé por qué esto sucede todavía.

Tuve el mismo problema con la selección de texto en TextView. Es eventuate, porque TextView utiliza SpannableString, pero el método estático Selected.getSelectionStart (CharSequence text) devuelve -1 si no es una instancia de Spanned. Lo resuelvo (y https://code.google.com/p/android/issues/detail?id=191430 para Android 6) ovveride dispatchTouchEvent como este:

 public class HackyTextView extends TextView { ... @Override public boolean dispatchTouchEvent(final MotionEvent event) { // FIXME simple workaround to https://code.google.com/p/android/issues/detail?id=191430 int startSelection = getSelectionStart(); int endSelection = getSelectionEnd(); if (startSelection < 0 || endSelection < 0){ Selection.setSelection((Spannable) getText(), getText().length()); } else if (startSelection != endSelection) { if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { final CharSequence text = getText(); setText(null); setText(text); } } return super.dispatchTouchEvent(event); } } 
  • El valor de la vista de texto se restablece al cambiar el fragmento
  • Cómo analizar un doble de EditText a TextView? (Androide)
  • Deslizar para desbloquear animación en Android
  • Creación de la caja de conmutación onClickListener para TextView
  • Android: Desplazamiento automático de texto en TextView
  • Cómo enlazar Android TextView a evento Click con MvvmCross
  • Fade out / fade en TextView basado en desplazamiento
  • Android: ¿Cómo hago bloques no rompibles en TextView?
  • Destacando el color del texto usando Html.fromHtml () en Android?
  • Esquina redondeada para texto en android
  • Android - Cambiar Título de Actionbar Text Color
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.