ProgressBar以编程方式不会出现在ListActivity中

时间:2012-08-21 07:11:42

标签: android android-asynctask listactivity loader android-progressbar

我有一个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下载的所有内容显示到List中。

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

我把它变成了可绘制的内容与自定义drawable,但是我希望它在AsyncTask加载时显示,并在AsyncTask完成(以编程方式)时消失..

编辑:

这很好用:

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

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

1 个答案:

答案 0 :(得分: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);
        }
    }
}