2013-02-08 47 views
0

嗨我正在从屏幕B执行操作。操作后,我显示一个警报对话框。一旦用户点击该对话框中的OK按钮,它将导航到屏幕A.它通过Intent发生。如何在Android中打开屏幕之前/之后执行异步任务?

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

我需要通过之前或打开屏幕A.

如何做到这一点后,调用一个异步任务更新列表?

+0

改为使用装载机。 – dymmeh 2013-02-08 20:33:13

+0

这不支持在2.2版本的权利? – MidhunVP 2013-02-08 20:36:46

+0

它会的。您必须使用支持库来执行此操作 – dymmeh 2013-02-08 20:37:07

回答

0

做到这一点,最好的办法是在你的onResume()或的onCreate()方法实例化您的AsyncTask。然后,在AsyncTask类的doInBackground方法中,您可以在某个数组中加载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()中的UI有关的事情:) 我希望这可以帮助你。

相关问题