0

我的 Android Activity 类中有一些微调器需要使用来自 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);

默认值为“All”,这很好,因为这是 Web 服务的默认行为。但是,我想callSpinnerWS()在用户触摸微调器时调用该方法,然后通过修改成员countryAdapter以使列表更符合我的喜好再次填充其数据countryAdapter.clear(),然后遍历不同的数组列表以添加项目。

我在哪里调用 Web 服务?完成此操作的适当绑定事件是什么?

4

1 回答 1

1

我建议使用 AsyncTask,你将 webservice 代码放在 doInBackground 中,它应该返回对列表元素集合的引用,它将返回到 onPostExecute,它将清除并重新填充适配器集合。实际上,使用工作线程是避免 ANR(android 无响应)异常的必要条件。在 onPreExecute() 中,您可以显示进度对话框,并在 onPostExecute 中将其关闭。

调用 AsyncTask 执行应放置在微调器单击侦听器中。您可以参考给定的微调器或参考其适配器来初始化 AsyncTask 的实例。

于 2012-04-17T21:46:48.190 回答