Cómo añadir sugerencias dinámicamente a autocompletetextview con preservar el estado de los caracteres

Descripción del problema:

Estoy haciendo frente a algún problema con AutoCompleteTextView donde tengo que mostrar sugerencias después de cada keypress. La cosa es que, la lista de sugerencia es dinámica como la característica de sugerencia de google. Esto significa que las nuevas sugerencias deben agregarse a medida que el usuario siga escribiendo más todas las sugerencias antiguas coincidentes.

Por ejemplo

Escribo "te" y luego debería mostrar sugerencias anteriores como "test1" y "test2" y las nuevas sugerencias que obtendré de la API Web. Supongamos que la API web me da la palabra "té" y "tensión".

Ahora, el AutoCompleteTextView tendrá "te" como cadena con las cuatro sugerencias mostradas debajo.

Esto es exactamente lo que estoy buscando.

Parece simple, pero está mostrando un comportamiento extraño.

Estoy usando la instancia de clase ArrayAdapter predeterminada de la que estoy declarando globalmente.

arrayAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,suggestions); word.setAdapter(arrayAdapter); 

Es ArrayList.

Al obtener un nuevo resultado de WebApi simplemente llamo

 arrayAdapter.notifyDataSetChanged(); 

Para actualizar el observador de datos y las vistas adjuntas con esto (en nuestro caso AutoCompleteListView).

Pero cierra sugerencias.

Cuando no utilizo notifyDataSetChanged(); Está mostrando todas las sugerencias, independientemente de los caracteres que he escrito.

Lo probé con filtro personalizado como muchos sugirieron pero ninguno de ellos es útil, ya que no podría usar notifyDataSetChanged ().

Estoy publicando una imagen para evitar confusiones. Introduzca aquí la descripción de la imagen

Tengo una confusión que por qué notifyDataSetChanged(); no funciona. No he utilizado ninguna otra referencia de la lista con la misma instancia del arrayAdapter. Realmente dudo que sea un problema de referencia.

2 Solutions collect form web for “Cómo añadir sugerencias dinámicamente a autocompletetextview con preservar el estado de los caracteres”

Una de las formas más fáciles de hacer eso (poner el código en onCreate):

EDIT: addied wikipedia gratis opensearch (si https://en.wikipedia.org no funciona intente http://en.wikipedia.org )

  AutoCompleteTextView actv = new AutoCompleteTextView(this); actv.setThreshold(1); String[] from = { "name", "description" }; int[] to = { android.R.id.text1, android.R.id.text2 }; SimpleCursorAdapter a = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, null, from, to, 0); a.setStringConversionColumn(1); FilterQueryProvider provider = new FilterQueryProvider() { @Override public Cursor runQuery(CharSequence constraint) { // run in the background thread Log.d(TAG, "runQuery constraint: " + constraint); if (constraint == null) { return null; } String[] columnNames = { BaseColumns._ID, "name", "description" }; MatrixCursor c = new MatrixCursor(columnNames); try { String urlString = "https://en.wikipedia.org/w/api.php?" + "action=opensearch&search=" + constraint + "&limit=8&namespace=0&format=json"; URL url = new URL(urlString); InputStream stream = url.openStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); String jsonStr = reader.readLine(); // output ["query", ["n0", "n1", ..], ["d0", "d1", ..]] JSONArray json = new JSONArray(jsonStr); JSONArray names = json.getJSONArray(1); JSONArray descriptions = json.getJSONArray(2); for (int i = 0; i < names.length(); i++) { c.newRow().add(i).add(names.getString(i)).add(descriptions.getString(i)); } } catch (Exception e) { e.printStackTrace(); } return c; } }; a.setFilterQueryProvider(provider); actv.setAdapter(a); setContentView(actv, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

Usted tiene impletent el filtro del custume en la clase del niño de ArrayAdapter, allí en método del filtro del funcionamiento usted tiene que hacer la llamada de la red y conseguir datos del servidor. Puede configurar estos datos en su arraylist principal.

  • Android ListView no se actualiza después de notifyDataSetChanged
  • FragmentPagerAdapter notifyDataSetChanged no funciona
  • NotifyDataSetChanged no puede actualizar ListView
  • Mantener el foco en TextView después de notifyDatasetChanged () fue llamado en listview personalizado?
  • Using notifyItemRemoved o notifyDataSetChanged con RecyclerView en Android
  • Android: ListFragment refresh utilizando notifyDataSetChanged () con el adaptador personalizado no funciona
  • NotifyDataSetChanged- RecyclerView -¿Es una llamada asincrónica?
  • ¿Quieres implementar notifyDataSetChanged o autorefresh a mi RecyclerView pero no funciona
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.