您好,我正在从屏幕 B 执行操作。操作后,我正在显示一个警报对话框。一旦用户单击该对话框中的 OK 按钮,它将导航到屏幕 A。这是通过 Intent 发生的。
屏幕 A 包含一个列表。该列表通过列表活动和数组适配器填充。
我需要在打开屏幕 A 之前或之后调用异步任务来更新列表。
怎么做?
您好,我正在从屏幕 B 执行操作。操作后,我正在显示一个警报对话框。一旦用户单击该对话框中的 OK 按钮,它将导航到屏幕 A。这是通过 Intent 发生的。
屏幕 A 包含一个列表。该列表通过列表活动和数组适配器填充。
我需要在打开屏幕 A 之前或之后调用异步任务来更新列表。
怎么做?
最好的方法是在 onResume() 或 onCreate() 方法中实例化 AsyncTask。然后,在 AsyncTask 类的 doInBackground 方法中,您可以将 listView 所需的数据加载到某个数组中。最后,在 onPostExecute() 中,您应该使用数组中的数据实例化您的适配器,然后将其分配给您的 listView。像这样的东西:
ProgressDialog pd;
ArrayAdapter<String> adapter;
ArrayList<String> dataStrings;
@Override
public void onResume() {
dataStrings = new ArrayList<String>();
pd = new ProgressDialog(context);
new MyAsyncTask().execute(params);
}
public class MyAsyncTask extends AsyncTask<String, Boolean, ArrayList<String>> {
@Override
protected void onPreExecute( )
{
pd = new ProgressDialog(context);
pd.setTitle(EsCache.instance.getLangItem("LABEL_PLEASE_WAIT"));
pd.setMessage(EsCache.instance.getLangItem("LABEL_LOADING_DATA"));
pd.setCancelable(true);
pd.show();
}
@Override
protected ArrayList<String> doInBackground(String... params) {
// TODO Auto-generated method stub
dataStrings = SomeMethodGetData(); // returns data and stores it in list
return dataStrings;
}
@Override
protected void onPostExecute(ArrayList<String> list) {
adapter = new ArrayAdapter<String>(context,
android.R.layout.simple_list_item_1, dataStrings);
listView.setAdapter(adapter);
pd.dismiss();
}
}
这只是一个最简单的演示,但它完成了工作,如果您使用一些自定义适配器,它并没有太大的不同。您必须小心,但不要混淆某些内容并尝试从 doInBackground() 更改与 UI 相关的任何内容:) 我希望这对您有所帮助。