0

您好,我正在从屏幕 B 执行操作。操作后,我正在显示一个警报对话框。一旦用户单击该对话框中的 OK 按钮,它将导航到屏幕 A。这是通过 Intent 发生的。

屏幕 A 包含一个列表。该列表通过列表活动和数组适配器填充。

我需要在打开屏幕 A 之前或之后调用异步任务来更新列表。

怎么做?

4

1 回答 1

0

最好的方法是在 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 相关的任何内容:) 我希望这对您有所帮助。

于 2013-02-08T22:47:01.093 回答