1
我想做出這樣的事情:Android:Spinner顯示來自Web服務的內容
主要目標是顯示從某些Web服務加載的微調器內容。
用戶單擊微調器 - 適配器應顯示一些文本,如「加載...」。當它最終加載時 - 它應該用裝入的內容替換微調器中的現有適配器。
我做了什麼:我做了一個微調和onTouchListener它。在監聽器中,我啓動了asyncTask,它從Web服務下載數據。在onPostExecute的asyncTask我想實際上取代spinners適配器,並做spinner.performClick()。但事實上,用戶同時看到2個適配器 - 最初的一個(「加載...」)和新的,由spinner.performClick()顯示。
有沒有更好的想法如何才能完成初始任務或如何只顯示一個適配器?
下面是一些代碼,我用:
private class CountryRegionCity extends AsyncTask<String, Void, JSONArray> {
protected JSONArray doInBackground(String... params) {
// Getting contents from web service
{...}
return someJSONArray;
}
protected void onPostExecute (JSONArray jsonArray) {
ArrayList<String> countryNames = new ArrayList<String>();
//Filling here countryNames based on jsonArray
{...}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, countryNames);
mCountrySpinner.setAdapter(adapter);
mCountrySpinner.performClick();
}
}
public View onCreateDialogView() {
ArrayAdapter<String> countryArrayAdapter=new ArrayAdapter<String> (context(), android.R.layout.simple_spinner_item, new String[] {"Loading..."});
mCountrySpinner.setAdapter(countryArrayAdapter);
mCountrySpinner.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
CountryRegionCity getCountries = new CountryRegionCity();
getCountries.execute("countries");
return false;
}
});
}