2012-04-17 9 views
0

Androidサービスのクラスには、Webサービスからのデータを取り込む必要があります。 Webサービスコールを呼び出すメソッドをすでに設定しています。 Webサービスからデータが返され、解析されると、それぞれのデータがクラスのメンバーArrayListに移入されます。問題は、ユーザーが特定のスピナーを選択した場合にのみこれらの呼び出しを呼び出す方法がわからないことです。例えば、私はcountrySpinnerをバインドするために、次のコードを使用します。Spinnerを非同期で呼び出すと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サービスのデフォルトの動作であるので、結構です「すべて」です。しかし、私は、ユーザーがスピナーに触れたときに、その後、countryAdapter.clear()によって私の好みに合わせてより多くのリストを持っているメンバーcountryAdapterを修正して、項目を追加するために、異なるのArrayListを反復することにより、再びそのデータを取り込む方法callSpinnerWS()を呼び出したいです。

ここで、Webサービスに電話をかけますか?これを達成するための適切なバインディング・イベントは何ですか?

答えて

1

私はAsyncTaskを使用することをお勧めします。あなたはdoInBackgroundの中にWebサービスコードを入れ、リスト要素のコレクションへの参照を返す必要があります。これはonPostExecuteに返され、アダプタコレクションをクリアして再投入します。実際にワーカースレッドを使用することは、ANR(android not responding)例外を避けるために必須です。 onPreExecute()では、進行状況ダイアログを表示し、onPostExecuteで閉じることができます。実行AsyncTaskを呼び出す

はスピナークリックリスナーに配置する必要があります。 AsyncTaskのインスタンスは、指定されたスピナーを参照して、またはそのアダプタを参照して初期化することができます。

関連する問題