我有一个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中执行相同的任务,有人知道怎么做?
答案 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);
}
}
}