Cómo agregar espacio a la sugerencia de AutoCompleteTextView
Quisiera agregar el espacio cuando el usuario selecciona el texto de las sugerencias auto completas, así que cuando él continúa mecanografiando él comenzará de una nueva palabra.
Intenté hacerlo usando TextWatcher
pero consigo IndexOutOfBoundsException
.
- Buscar sugerencias de diferentes tablas en diferentes actividades
- Searchview que no cierra correctamente en la PRIMERA prensa trasera (es solamente perdida del foco)
- SearchView en OptionsMenu no es el ancho completo
- No se puede ocultar el teclado virtual de SearchView iconfiedbydefault (false)
- Pasar la consulta de búsqueda ActionBar para fragmentar
¿Alguna sugerencia?
El observador de texto que he utilizado es:
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(" "); } } }
La excepción que recibo es:
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)
- Implementación correcta de SearchView en la barra de herramientas de Android
- Cambiar el fondo de la sugerencia de AppCompat SearchView
- Cómo diseñar un SearchView en la barra de acciones de Android
- ¿Cómo personalizar el botón "arriba" cuando se está expandiendo el searchView?
- ActionBarSherlock - SearchView es null?
- ¿Hay algún oyente en Android SearchView para notificar si SearchView está expandido y listo para tomar entrada?
- Android Searchview OnQueryTextListener con base de datos no funciona
- Biblioteca de soporte de Android 24.0.0 no muestra texto en SearchView
Para seleccionar varios elementos, simplemente puede utilizar MultiAutoCompleteTextView
que es una subclase de AutoCompleteTextView
construida específicamente para este propósito.
O
Si sólo desea añadir un espacio al final haciendo sólo un elemento seleccionable que pruebe esto:
public void afterTextChanged(Editable editable) { String text = editable.toString(); if (shouldAddSpace && text.length() > 0 && !text.endsWith(" ")) { editable.append(' '); } }
Editar:
Una vez que el espacio se anexa, simplemente puede llamar a mAutoCompleteTextView.showDropDown();
Para abrir el menú desplegable de nuevo con el texto actualizado.
No estoy seguro de si esto resolvería su problema, pero mAutoCompleteTextView.setText(" ");
Quitaría el texto. Así que haría esto:
mAutoCompleteTextView.setText(mAutoCompleteTextView.getText().toString() + " ");
mAutoCompleteTextView.setText(" ");
Este código establece el texto de vista de texto como "" – Lo que desea es el texto existente más el espacio.
mAutoCompleteTextView.setText(mAutoCompleteTextView.getText().append(" "));
Prefiero usar "MultiAutoCompleteTextView" para lograr lo que estás tratando de hacer.
<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" >
En el archivo java:
private AutoCompleteTextView actv; actv = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);
Lista de cuerdas:
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);
Este ejemplo muestra la lista de países que corresponden a la entrada del usuario. Espero que este ejemplo sea de alguna ayuda para su trabajo.
- SQLiteDatabase.openDatabase vs SQLiteOpenHelper.getReadableDatabase
- FIleObserver y ContentObserver no funcionan en Android Marshmallow