2015-05-04 12 views
7

Vorrei aggiungere spazio quando l'utente seleziona il testo dai suggerimenti di completamento automatico, così quando continua a digitare inizierà da una nuova parola.Come aggiungere spazio a AutoCompleteTextView suggerimento

Ho provato a farlo utilizzando TextWatcher ma ottengo IndexOutOfBoundsException.

Qualche suggerimento?

enter image description here

l'osservatore di testo che ho usato è:

private class AddSpaceTextWatcher implements TextWatcher{ 

    boolean shouldAddSpace = false; 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int before, int count) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if (count - before > 1) // check that the new input is not from the keyboard 
      shouldAddSpace = true; 
    } 

    @Override 
    public void afterTextChanged(Editable editable) { 
     if (shouldAddSpace) { 
      shouldAddSpace = false; 
      mAutoCompleteTextView.setText(" "); 
     } 
    } 
} 

L'eccezione che ottengo è:

java.lang.IndexOutOfBoundsException: setSpan (18 ... 18) ends beyond length 1 
     at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1018) 
     at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:611) 
     at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:607) 
     at android.text.Selection.setSelection(Selection.java:76) 
     at android.text.Selection.setSelection(Selection.java:87) 
     at android.widget.EditText.setSelection(EditText.java:99) 
     at android.widget.SearchView.setQuery(SearchView.java:1465) 
     at android.widget.SearchView.onQueryRefine(SearchView.java:889) 
     at android.widget.SuggestionsAdapter.onClick(SuggestionsAdapter.java:371) 
     at android.view.View.performClick(View.java:4756) 
     at android.view.View$PerformClick.run(View.java:19748) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5254) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) 
+1

potresti pubblicare il codice e lo stacktrace dell'eccezione? – Blackbelt

+0

forse hai bisogno di chiamare append invece di setText – Blackbelt

+0

puoi pubblicare il tuo codice arrayAdapter .. –

risposta

3

Per selezionare più elementi, si può semplicemente utilizzare MultiAutoCompleteTextView che è una sottoclasse di AutoCompleteTextView appositamente costruito per questo scopo.

O

Se si desidera solo per aggiungere uno spazio alla fine facendo un solo elemento selezionabile di provare questo:

public void afterTextChanged(Editable editable) { 
    String text = editable.toString(); 
    if (shouldAddSpace && text.length() > 0 && !text.endsWith(" ")) { 
     editable.append(' '); 
    } 
} 

Edit:

Una volta che lo spazio viene aggiunto, puoi semplicemente chiamare mAutoCompleteTextView.showDropDown(); per visualizzare nuovamente il menu a discesa con il testo aggiornato.

+0

@Pinhassi ha funzionato per te? fammi sapere se hai riscontrato problemi ... –

+0

Lo fa, quindi ti darò la taglia, ma vorrei anche che il cursore si sposti alla fine del testo (dopo ""). –

+0

@Pinhassi vedere la mia risposta aggiornata per l'aggiornamento del cursore e fammi sapere se ciò non funziona, non ho testato ma dovrebbe funzionare! –

0

io non sono sicuro se questo avrebbe risolto il problema, ma mAutoCompleteTextView.setText(" "); rimuoverebbe il testo. Quindi mi sento di fare questo:

mAutoCompleteTextView.setText(mAutoCompleteTextView.getText().toString() + " "); 
0
mAutoCompleteTextView.setText(" "); 

Questo codice imposta il testo della vista testo su "" - Ciò che si desidera è il testo esistente più lo spazio.

mAutoCompleteTextView.setText(mAutoCompleteTextView.getText().append(" ")); 
0

Io preferisco usare "MultiAutoCompleteTextView" per ottenere ciò che si sta cercando di fare.

<AutoCompleteTextView 
    android:id="@+id/autoCompleteTextView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="65dp" 
    android:ems="10" > 

In java:

private AutoCompleteTextView actv; 
actv = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1); 

lista di stringhe:

String[] countries = getResources(). 
    getStringArray(R.array.list_of_countries); 
    ArrayAdapter adapter = new ArrayAdapter 
    (this,android.R.layout.simple_list_item_1,countries); 
    actv.setAdapter(adapter); 

Questo elenco esempio visualizza dei paesi corrispondenti agli input dell'utente. Spero che questo esempio possa essere di aiuto al tuo lavoro.

Problemi correlati