如何在android中打开屏幕之前/之后执行异步任务?

时间:2013-02-08 20:28:01

标签: android android-intent android-asynctask

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

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

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

怎么做?

1 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是在onResume()或onCreate()方法中实例化AsyncTask。然后,在AsyncTask类的doInBackground方法中,您可以在某些Array中加载listView所需的数据。 Finnaly,在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():)有关的任何东西:) 我希望这对你有帮助。