2011-04-23 13 views
8

Tengo un widget MultiAutoCompleteTextView en mi actividad, que tiene un ArrayAdapter<String> que se completa con un resultado de una llamada basada en web. A medida que el usuario escribe los caracteres en la vista de texto, la lista de este adaptador debe actualizarse en segundo plano. ¿Cuál es la mejor manera de implementar esto?MultiAutoCompleteTextView con cambios de adaptador dinámico

Ya he intentado usar AsyncTask para descargar la lista de cadenas en el fondo, pero notifyDataSetChanged() se estaba llamando desde el "hilo no originario". Además, esto parece una pequeña rotonda.

La otra opción que encontré es que se puede usar Filterable, pero no he encontrado ejemplos simples (AutoComplete4 parece una exageración) sobre cómo hacer esto. Si no hay ejemplos, ¿alguien puede dar una visión general amplia de los actores que necesitaré? Filtrar, Filtrar, etc.

¿También es este un buen camino a seguir?

Gracias,
Rajath

+0

¿Tienen alguna solución – user1767260

+0

@ user1767260, han pasado más de dos años que había publicado estas preguntas; No creo que persiguiera esto. – rajath

Respuesta

0

Sé que esta pregunta es viejo, pero tenía que hacer lo mismo y pensé que sería buena idea compartir la solución con usted o alguien que lo necesitaría.

En primer lugar, deberá utilizar un AsyncTask para recuperar sus datos. Dicho esto, nunca dejaría que un AsyncTask manipule de ninguna manera mi clase de vista. En su lugar, prefiero usar una devolución de llamada pasada junto con los parámetros que necesita en su AsyncTask. Tan pronto como finalice la AsyncTask, llamará a su método de devolución de llamada que será responsable de llamar al notifyDataSetChanged().

Aquí hay algo de código:

MyAsyncTask.java

public class MyAsyncTask extends AsyncTask<Object, Void, Object> { 

@Override 
protected String doInBackground(Object... params) { 
    MyController callbackClass = (MyController) params[0]; 

    // Get your other parameters and do your stuff here... 

    // Call the setter with the data you get back and refresh the view 
    // either here or implementing onPostExecute. 
    callbackClass.setMyData(myData); 
    callbackClass.refreshView(); 

    // Return any object if you need. 
    return null; 
} 
} 

MyCallbackClass.java

public MyCallbackClass extends Fragment{ 

    private List<MyDataType> myData; 

    private ArrayAdapter<MyDataType> myAdapter; 

    // Your methods including setters and getters. 

    public void refreshFriendList(){ 
    if(myAdapter == null){ 
     initAutoCompleteView(); 
    } 
    myAdapter.clear(); 
    myAdapter.addAll(myData); 
    myAdapter.notifyDataSetChanged(); 
    } 

} 
Cuestiones relacionadas