在ListActivity阻止app中加载项目

时间:2011-04-26 18:22:44

标签: android progress-bar android-asynctask listactivity progressdialog

好吧,我正在创建一个应用程序,其中我使用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
...

1 个答案:

答案 0 :(得分:0)

请勿从publishProgress()致电onPostExecute()。对于初学者来说,在onPostExecute()完成之后,进度不会改变,无论如何,因为需要在主应用程序线程上调用onProgressUpdate(),而主应用程序线程正在运行onPostExecute()逻辑。

如果您仍觉得运行速度太慢,我建议您使用Traceview或简单的日志记录语句来确定问题的确切位置。