0

私の Android アクティビティ クラスには、Web サービスからのデータを入力する必要があるいくつかのスピナーがあります。Web サービス呼び出しを呼び出すメソッドは既に設定しています。Web サービスがデータを返し、それが解析されたら、それぞれのデータをArrayListクラスのメンバーに入力します。問題は、ユーザーが特定のスピナーを選択したときにのみこれらの呼び出しを呼び出す方法がわからないことです。たとえば、次のコードを使用してバインドしcountrySpinnerます。

    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()そのデータを再度入力したいと考えています。countryAdaptercountryAdapter.clear()

Web サービスへの呼び出しはどこに置くのですか? これを達成するための適切なバインド イベントは何ですか?

4

1 に答える 1

1

AsyncTask を使用することをお勧めします。Web サービス コードを doInBackground 内に配置すると、リスト要素のコレクションへの参照が返されます。onPostExecute に返され、アダプタ コレクションがクリアされて再設定されます。実際にワーカー スレッドを使用することは、ANR (Android が応答しない) 例外を回避するために必須です。onPreExecute() で進行状況ダイアログを表示し、onPostExecute で閉じることができます。

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

于 2012-04-17T21:46:48.190 に答える