2012-04-17 36 views
0

我的Android Activity類中有幾個需要使用來自Web服務的數據填充的微調器。我已經設置了調用Web服務調用的方法。一旦Web服務返回數據並進行解析,我將相應的數據填充到我的課程的ArrayList成員中。問題是我不知道如何僅在用戶選擇特定的微調器時調用這些調用。舉例來說,我用下面的代碼綁定countrySpinner只在點擊時向Web服務器填充微調器

countrySpinner = (Spinner) findViewById(R.id.spinner_country); 

    List<String> list= new ArrayList<String>(); 

    list.add("All"); // <-- initial/default content 

    countryAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list); 
    countryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    countrySpinner.setAdapter(countryAdapter); 

的默認值是「所有」,這是很好的,因爲這是Web服務的默認行爲。但是,當用戶觸摸微調框時,我想要調用方法callSpinnerWS(),然後通過修改成員countryAdapter以使其具有更多我喜歡的列表countryAdapter.clear(),然後遍歷不同的數組列表來添加項目,從而再次填充其數據。

我在哪裏打電話給網絡服務?完成此事的適當綁定事件是什麼?

回答

1

我建議使用AsyncTask,你把web服務代碼放在doInBackground裏面,它應該返回對列表元素集合的引用,它會返回到onPostExecute,它將清除並重新填充適配器集合。實際上使用工作線程是強制性的以避免ANR(android not responding)異常。在onExExcute()中,您可以顯示進度對話框,並在onPostExecute中關閉它。

調用AsyncTask執行應放置在微調器單擊偵聽器中。您可以參考給定的微調器或參考其適配器來初始化AsyncTask的實例。