好吧,我正在创建一个应用程序,其中我使用ListActivity来显示包含我从Internet下载的图像以及TextView和评级栏的视图。 我添加了一个AsyncTask来管理它,并在onPostExecute()部分中使用我的setListAdapter;但是,我还想在设置完成时显示进度条(或progressdialog)。
条形图在我的模拟器中确实出现了一段时间,但是当我在设备上尝试我的应用程序时,甚至在模拟器中,当setListAdapter正在工作时,条形图会冻结但是...它只是我没有想出了如何在我的ArrayAdapter上添加publishProgress,因为它是另一个类。 啊,是的,我设置了ListActivity的布局,这就是我放置progressBar的地方,但是我想这个设备使得doInBackground部分非常快,所以布局甚至都没有显示。
这是我到目前为止所得到的:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
extras = getIntent().getExtras();
platinumCinema = false;
setContentView(R.layout.simple_list_item_1);
Log.i(TAG,"Control B");
MoviesAsyncTask movieTask = new MoviesAsyncTask();
movieTask.execute();
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title_billboard);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgress = (ProgressBar)findViewById(R.id.progressbar_Horizontal);
mProgress.setVisibility(View.VISIBLE);
Log.i(TAG, "PreExecute");
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(result.equals("ok"))
Log.i(TAG,"Ended succesfully");
//ProgressDialog mDialog = ProgressDialog.show(BillboardMovieList.this, "","Loading. Please wait...", true);
publishProgress(75);
if(searchMethod.equals("byCinema")){
setListAdapter(new ArrayAdapterSchemaCinemas(BillboardMovieList.this, listMovies,listPosters, listRating, listTimes));
}else
...
答案 0 :(得分:0)
请勿从publishProgress()
致电onPostExecute()
。对于初学者来说,在onPostExecute()
完成之后,进度不会改变,无论如何,因为需要在主应用程序线程上调用onProgressUpdate()
,而主应用程序线程正在运行onPostExecute()
逻辑。
如果您仍觉得运行速度太慢,我建议您使用Traceview或简单的日志记录语句来确定问题的确切位置。