2011-04-23 102 views
8

我的Activity中有一個MultiAutoCompleteTextView小部件,其中有一個ArrayAdapter<String>,它由來自基於Web的調用的結果填充。當用戶在文本視圖中鍵入字符時,該適配器的列表應該在後臺更新。什麼是實施這個最好的方法?帶動態適配器更改的MultiAutoCompleteTextView

我已經嘗試使用AsyncTask在後臺下載字符串列表,但notifyDataSetChanged()正在從「非始發線程」調用。而且,這似乎有點迂迴。

我遇到的另一個選擇是Filterable可以使用,但我沒有遇到任何簡單的例子(AutoComplete4看起來像一個矯枉過正)如何做到這一點。如果沒有例子,有人可以給我一個我將需要的演員的廣泛概述 - 過濾器,Filterable等。

也是這是一個好方法嗎?

感謝,
Rajath

+0

你有任何解決方案 – user1767260 2013-09-30 10:03:17

+0

@ user1767260,它已經兩年多了我發佈了這些問題;我不認爲我追求這一點。 – rajath 2013-09-30 10:50:12

回答

0

我知道這個問題是舊的,但我不得不這樣做同樣的事情,我想我會與大家分享的解決方案或任何需要它。

首先,您確實需要使用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(); 
    } 

}