【问题标题】:ProgressBar Programmatically doesn't appear in ListActivityProgressBar 以编程方式未出现在 ListActivity 中
【发布时间】:2012-08-21 07:11:41
【问题描述】:

我有一个带上下文的 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 中执行相同的任务,有人知道怎么做吗?

【问题讨论】:

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


    【解决方案1】:

    在 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);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      相关资源
      最近更新 更多