2012-06-13 60 views
1

我想做出這樣的事情:Android:Spinner顯示來自Web服務的內容

主要目標是顯示從某些Web服務加載的微調器內容。

用戶單擊微調器 - 適配器應顯示一些文本,如「加載...」。當它最終加載時 - 它應該用裝入的內容替換微調器中的現有適配器。

我做了什麼:我做了一個微調onTouchListener它。在監聽器中,我啓動了asyncTask,它從Web服務下載數據。在onPostExecuteasyncTask我想實際上取代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; 
      } 
     }); 
} 

回答

1

我想你可以微調控件的用戶notifyDataSetChanged()方法來顯示適配器的數據的變化。