android – 具有动态适配器更改的MultiAutoCompleteTextView

前端之家收集整理的这篇文章主要介绍了android – 具有动态适配器更改的MultiAutoCompleteTextView前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的Activity中有一个MultiAutoCompleteTextView小部件,它有一个ArrayAdapter< String>由基于Web的呼叫的结果填充.当用户在textview中键入字符时,此适配器的列表应在后台更新.实现这个的最佳方法是什么?

我已经尝试使用AsyncTask在后台下载字符串列表,但是从“非原始线程”调用了notifyDataSetChanged().而且,这似乎有点迂回.

我遇到的另一个选择是可以使用Filterable,但我没有遇到任何关于如何执行此操作的简单示例(AutoComplete4似乎有点矫枉过正).如果没有例子,有人可以对我需要的演员进行广泛的概述 – 过滤,过滤等.

这也是一个好方法吗?

谢谢,
Rajath

解决方法

我知道这个问题很老,但我必须做同样的事情,我想我会与你分享解决方案,或者任何人都需要它.

首先,您确实需要使用AsyncTask来检索数据.这就是说,我永远不会让AsyncTask以任何方式操纵我的视图类.相反,我宁愿使用与AsyncTask中所需参数一起传递的回调. AsyncTask完成后,您将调用您的回调方法,该方法将负责调用notifyDataSetChanged().

这是一些代码

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();
   }

}

猜你在找的Android相关文章