2017-01-31 3 views
-2

Je reçois cette erreur lorsque j'essaie d'obtenir la position du premier et du dernier caractère saisi par un utilisateur dans un AutoCompleteTextView.Causée par: java.lang.IndexOutOfBoundsException sur AutocompleteTextView

J'apprécierais toute aide fournie.

Lorsque j'ajoute un textChangeListener je reçois toujours l'erreur java.lang.IndexOutOfBoundsException: setSpan (0 ... -1) a la fin avant le début

Voici mes codes ci-dessous:

final AutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autocompleteView); 

autoCompleteTextView.setAdapter(autoComplete); 

autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     //my statements 


    } 
}); 

     autoCompleteTextView.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      //int start = startText.indexOf(0); 
      String startText = autoCompleteTextView.getText().toString(); 
      int end = startText.indexOf(1); 
      SpannableStringBuilder builder = new SpannableStringBuilder(startText); 
      // set foreground color (text color) - optional, you may not want to change the text color too 
      builder.setSpan(new ForegroundColorSpan(Color.RED), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      // set background color 
      builder.setSpan(new BackgroundColorSpan(Color.YELLOW), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      // set result to AutoCompleteTextView 
      autoCompleteTextView.setText(builder); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 

Error Log

01-31 16:02:37.418 20357-20357/? E/AndroidRuntime: FATAL EXCEPTION: main 
               Process: com.lawerh.jonathan.partygoer, PID: 20357 
               java.lang.IndexOutOfBoundsException: setSpan (0 ... -1) has end before start 
                at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1101) 
                at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:680) 
                at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:673) 
                at com.lawerh.jonathan.partygoer.ui.MapActivity$8.onTextChanged(MapActivity.java:328) 
                at android.widget.TextView.sendOnTextChanged(TextView.java:8320) 
                at android.widget.TextView.handleTextChanged(TextView.java:8385) 
                at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:10531) 
                at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1051) 
                at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:572) 
                at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:503) 
                at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:502) 
                at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:693) 
                at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:453) 
                at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:340) 
                at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:78) 
                at android.os.Handler.dispatchMessage(Handler.java:111) 
                at android.os.Looper.loop(Looper.java:207) 
                at android.app.ActivityThread.main(ActivityThread.java:5728) 
                at java.lang.reflect.Method.invoke(Native Method) 
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679) 
+0

S'il vous plaît arrêter de poser la même question encore et encore. –

+0

@Rotwang je dois mettre la question dans une vue différente, plus vous ne m'a jamais répondu sur l'autre question – jonathan

+0

J'ai commenté l'autre question. Et c'était suffisant pour résoudre votre problème. –

Répondre

1

int end = int end = startText.indexOf(1);

Retourne -1 car le nombre 1 n'est pas trouvé dans la chaîne. Ensuite, lorsque vous utilisez fin dans l'appel setSpan, vous passez (0,-1). Vérifiez que votre starttext contient un 1 et il se peut que vous avez juste besoin de mettre le 1 entre guillemets, comme ceci:

int end = int end = startText.indexOf("1");

+0

cela fonctionne pour moi. mais une chose de plus que la méthode Spannable ne fonctionne pas. je suis incapable de mettre en évidence le texte lorsque j'utilise la méthode spannable – jonathan

0

problème est en int end = startText.indexOf(1); ligne de votre code. Tout d'abord, la fonction indexOf() prend un caractère comme argument mais vous passez 1 (entier), et la fonction indexOf() renvoie -1 et lorsque vous définissez l'intervalle builder.setSpan(new ForegroundColorSpan(Color.RED), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);, la valeur finale est -1, ce qui lance IndexOutOfBoundsException

+0

String q = ""; int start = selectText.indexOf (q); int end = q.length() + start; mais builder.setSpan (nouveau ForegroundColorSpan (Color.RED), début, fin, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); ça ne marche pas pour moi – jonathan