我想以编程方式显示ProgressDialog,它会为布局添加多个视图。 我在主Activity上声明了一个ProgressDialog,然后启动了一个AsyncTask来添加多个视图。在AsyncTask的onPostExecute上,ProgressDialog被解除。该应用程序工作,但问题是启动缓慢,ProgressDialog暂时冻结。 这是AsyncTask的主要循环。列扩展了LinearLayout。
for(int i=0;i<7;i++){
((LinearLayout) Global.a.findViewById(R.id.scrollLayout)).addView(new Column(Global.a,i));
}
答案 0 :(得分:3)
根据您的代码段,您似乎错误地使用了AsyncTask。
for(int i=0;i<7;i++){
((LinearLayout) Global.a.findViewById(R.id.scrollLayout)).addView(new Column(Global.a,i));
}
这绝不应该在AysncTask中完成。如果它完成了doInBackground,那么你正在从另一个线程修改UI,如果它在其他任何地方完成(onPreExecute(),onPostExecute()或onProgressUpdate(),那么你在UI线程中运行for循环。
最好的解决方案是创建一个xml文件,其中包含您要添加到其中的视图。虽然如果您打算在AsyncTask中添加视图,那么您需要更改其完成方式。
private SomeName extends AsyncTask<Void,Column,Void>{
private Linearlayout layout;
protected void onPreExecute(Void... unused){
//UI thread
//show dialog
layout = (LinearLayout) Global.a.findViewById(R.id.scrollLayout);
}
protected void doInBackground(Void... unused){
//Background thread
for(int i=0;i<7;i++){
//create the view in the background
Column column = new Column(Global.a,i);
//call publish progress to update the UI
publishProgress(column);
}
}
protected void onProgressUpdate(Column... column){
//UI thread
//Update the UI
layout.addView(column[0]);
}
protected void onPreExecute(Void... unused){
//UI thread
//dismiss dialog
}
}
答案 1 :(得分:0)
由于您没有发布任何代码,我只能建议让您的progressDialog成为AsyncDialog的一部分并将您的ProgressDialog.show
放入AsyncTask的onPreExecute