Come aggiungere dynamicmente suggerimenti a autocompletetextview con il mantenimento dello stato dei caratteri

Descrizione del problema:

Mi trovo di fronte a un problema con AutoCompleteTextView where devo mostrare suggerimenti dopo each pressione. La cosa è che, l'elenco di suggerimenti è dinamico come la function di suggerimento di google. Significa che i nuovi suggerimenti dovrebbero essere aggiunti mentre l'utente continua a digitare e tutti i vecchi suggerimenti corrispondenti dovrebbero essere visualizzati.

  • Come impostare una vista personalizzata nelle tabs di navigazione di ActionBar e rendere le tabs adattate alla sua altezza?
  • AsyncTask: valore passante ad un Attività (metodo onCreate)
  • Come posso recuperare i dati da un server web in un'applicazione android?
  • Come rimuovere un'authorization aggiunta a causa di Google Fitness API 7.5.0
  • Come aggiungere la barra di scorrimento al layout relativo?
  • Debug remoto Chrome sul problema di Android
  • Per esempio

    Scrivo "te" e poi dovrei mostrare suggerimenti precedenti come "test1" e "test2" e i nuovi suggerimenti che riceverò da Web API. Supponiamo che il web api mi dà la parola "tè" e "tensione".

    Ora l'AutoCompleteTextView avrà "te" come string con tutti e quattro i suggerimenti che mostrano sotto di esso.

    Questo è esattamente quello che sto cercando.

    sembra semplice ma sta mostrando un comportmento strano.

    Sto usando l'istanza di class ArrayAdapter predefinita di cui sto dichiarando a livello globale.

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

    suggerimenti è ArrayList.

    Dopo aver ottenuto un nuovo risultato da WebApi, semplicemente chiami

     arraysAdapter.notifyDataSetChanged(); 

    per aggiornare l'osservatore di dati e le viste allegate con questo (nel nostro caso AutoCompleteListView).

    Ma chiude i suggerimenti.

    Quando non utilizzo notifyDataSetChanged(); sta mostrando tutti i suggerimenti indipendentemente dai caratteri che ho digitato.

    Ho provato con un filter personalizzato come molti hanno suggerito ma nessuno di loro è utile perché non ho potuto utilizzare notifyDataSetChanged ().

    Sto postando un'image per evitare confusioni. immettere qui la descrizione dell'immagine

    Ho una confusione perchè notifyDataSetChanged(); la sua non funziona. Non ho usato nessun altro riferimento di elenco con la stessa istanza arraysAdapter. Dubito veramente se sia un problema di riferimento.

  • string decodifica utf-8
  • Problema con la function getFloatv in GL11 (Android)
  • Aggiunta di TextViews a widget di home screen in modo programmato
  • Raccolta di connessione per un'applicazione Android che si connette a un DB di Postgresql
  • Perché EditText in una vista composita personalizzata riutilizza il text immesso in un'altra istanza di vista composta?
  • Autorizzazione READ_LOGS su Jelly Bean (api 16)
  • 2 Solutions collect form web for “Come aggiungere dynamicmente suggerimenti a autocompletetextview con il mantenimento dello stato dei caratteri”

    uno dei modi più facili da farlo (mettere il codice in onCreate):

    EDIT: addied wikipedia libera opensearch (se https://en.wikipedia.org non funziona prova 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)); 

    Hai implementato il filter custome nella class infantile di ArrayAdapter, nel metodo del filter di esecuzione devi fare la chiamata di networking e ricevere dati dal server. È ansible impostare questi dati nel tuo principale architetto.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.