2014-05-10 50 views
-1

我有一個可點擊的可伸縮字符串的EditText。java.lang.IndexOutOfBoundsException:charAt:-1 <0在SpannableStringBuilder中

但是,如果內容包含一個Spannable字符串,我點擊它或將其中的光標 ,我得到一個IndexOutOfBoundsException。這裏是我的錯誤日誌。

12月5日至22日:28:01.413:E/AndroidRuntime(5482):致命異常:主 12月5日至22日:28:01.413:E/AndroidRuntime(5482):java.lang.IndexOutOfBoundsException:的charAt: - 1 05-22 12:28:01.413:E/AndroidRuntime(5482):at android.text.SpannableStringBuilder.charAt(SpannableStringBuilder.java:112) 05-22 12:28:01.413:E/AndroidRuntime(5482) ):at android.text.Selection.setSelection(Selection.java:81) 05-22 12:28:01.413:E/AndroidRuntime(5482):at android.text.Selection.setSelection(Selection.java:115) 05-22 12:28:01.413:E/AndroidRuntime(5482):在android.widget.Editor $ InsertionHandleView.updateSelection(Editor.java:3697) 05-22 12:28:01.413:E/AndroidRuntime(5482)在android.widget.Editor $ HandleView.positionAtCursorOffset(Editor.java:3417) 05-22 12:28:01.413:E/AndroidRuntime(5482):在android.widget.Editor $ HandleView.updatePosition(Editor.java:3444 ) 05-22 12:28:01.413:E/AndroidRuntime(5482):at android.widget.Editor $ PositionListener.onPreDraw(Editor.java:2285) 05-22 12:28:01.413:E/AndroidRuntime(5482) ):at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:707) 05-22 12:28:01.413:E/AndroidRuntime(5482):at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1936) 05-22 12:28:01.413:E/AndroidRuntime(5482):在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1105) 05-22 12:28:01.413:E/AndroidRuntime(5482):at android .view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:4462) 0 5-22 12:28:01.413:E/AndroidRuntime(5482):在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:725) 05-22 12:28:01.413:E/AndroidRuntime(5482) android.view.Choreographer.doCrame(Choreographer.java:525) 05- 22 12:28:01.413:E/AndroidRuntime(5482):在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:711) 05-22 12:28:01.413:E/AndroidRuntime(5482):at android .os.Handler.handleCallback(Handler.java:615) 05-22 12:28:01.413:E/AndroidRuntime(5482):at android.os.Handler.dispatchMessage(Handler.java:92) 05-22 12 :28:01.413:E/AndroidRuntime(5482):在android.os.Looper.loop(Looper.java:137) 05-22 12:28:01.413:E/An droidRuntime(5482):at android.app.ActivityThread.main(ActivityThread.java:4895) 05-22 12:28:01.413:E/AndroidRuntime(5482):at java.lang.reflect.Method.invokeNative(Native Method ) 05-22 12:28:01.413:E/AndroidRuntime(5482):at java.lang.reflect.Method.invoke(Method.java:511) 05-22 12:28:01.413:E/AndroidRuntime(5482) ):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:994) 05-22 12:28:01.413:E/AndroidRuntime(5482):at com.android.internal.os.ZygoteInit 。主要(ZygoteInit.java:761) 12月5日至22日:28:01.413:E/AndroidRuntime(5482):在dalvik.system.NativeStart.main(本機方法)

+2

發佈您的代碼。 – kgandroid

+0

請添加與錯誤關聯的代碼。 –

+0

在此處顯示您的代碼。 – Piyush

回答

1

指數值從0啓動。您嘗試訪問索引爲-1(這是非法索引)中的字符這就是您遇到異常的原因。可能是你必須修復循環中的有效索引,而遍歷的字符。

請看看IndexOutOfBoundsException API

0

我有一個類似的問題,看起來似乎是由LinkMovementMethod引起的,用於我的EditText與ClickableSpan。

在我來說,問題重現只有editText.setMovementMethod(LinkMovementMethod.getInstance());

因此,要處理的ClickableSpan點擊無LinkMovementMethod - 添加自定義onClickListener,這樣的事情:

editText.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Editable editable = editText.getText(); 
       int pos = editText.getSelectionStart(); 
       ClickableSpan[] link = editable.getSpans(pos,pos, ClickableSpan.class); 
       if (link.length != 0) { 
        link[0].onClick(v); 
       } 
      } 
     }); 
相關問題