0

我有一个带有上下文的 AsyncTask:

public class DownloadDataPromotions extends AsyncTask<Void, Integer, ArrayList<HashMap<String, String>>>
{
    Context context;
    
    public DownloadDataPromotions(Context context) 
    {
        this.context = context;
    }
    @Override
    protected void onPreExecute() 
    {
        super.onPreExecute();
    }
    
    @Override
    protected ArrayList<HashMap<String, String>> doInBackground(Void... params)
    {
                ArrayList<HashMap<String, String>> promoList = new ArrayList<HashMap<String, String>>();
        promoList = DownloadingDataFromWebService();
                      ...
                return promoList;
    }
    
    @Override
    protected void onProgressUpdate(Integer... values) 
    {
    
        super.onProgressUpdate(values);
    }
    
    @Override
    protected void onPostExecute(ArrayList<HashMap<String, String>> promoList) 
    {
        super.onPostExecute(promoList);
                 ...
    }
}

然后我将它调用到一个 ListActivity(带有他的上下文),以便将从这个 AsyncTask 下载的所有内容显示到一个列表中。

但是现在我想在这个 AsyncTask 中添加一个 Loader ProgressBar,它只能通过以下方式确定:在 onPreExecute() 上显示并在 onPostExecute() 方法中停止显示..

我将它放入带有自定义可绘制对象的可绘制内容中,但我想让它在 AsyncTask 加载时出现并在 AsyncTask 完成时消失(以编程方式)..

编辑:

这工作正常:

ProgressBar pb = new ProgressBar(TabPromotionsJSONParsingActivity.this);
                LinearLayout ll = (LinearLayout) findViewById(R.id.linearlayoutProgressBar);
                ll.addView(pb);
                pb.setVisibility(View.VISIBLE);

但是我现在遇到的问题是在我的 Asynctask 完成时停止它。我想在我的 DownloadDataPromotions 中执行相同的任务,有人知道怎么做吗?

4

1 回答 1

2

在 onPreExecute 方法中添加创建 ProgressBar 的代码,在 onPostExecute 方法中添加隐藏它的代码。如下所示(要添加到您的课程中的代码):

public class DownloadDataPromotions extends AsyncTask<Void, Integer, ArrayList<HashMap<String, String>>>
{
    ProgressBar pb;
        ...
    @Override
    protected void onPreExecute() 
    {
        super.onPreExecute();

        pb = new ProgressBar(context);
        LinearLayout ll = (LinearLayout) context.findViewById(R.id.linearlayoutProgressBar);
        ll.addView(pb);
        pb.setVisibility(View.VISIBLE);

    }
    ...
    @Override
    protected void onPostExecute(ArrayList<HashMap<String, String>> promoList) 
    {
        super.onPostExecute(promoList);
        if (pb!=null) {
            ((LinearLayout)pb.getParent()).removeView(pb);
        }
    }
}
于 2012-08-21T11:06:38.740 回答