Загрузка элементов в приложение ListActivity blocks - PullRequest
0 голосов
/ 26 апреля 2011

Что ж, я делаю приложение, в котором я использую ListActivity для отображения представлений с изображениями, которые я загружаю из Интернета, а также TextViews и рейтинговых панелей. Я добавил AsyncTask для управления этим и мой setListAdapter в части onPostExecute (); тем не менее, я также хотел, чтобы индикатор выполнения (или progressdialog) отображался во время настройки.

В моем эмуляторе на некоторое время появляется полоса, но не тогда, когда я пробую свое приложение на устройстве, и даже в эмуляторе, полоса зависает, когда setListAdapter работает, но ... просто у меня нет выяснил, как добавить publishProgress в мой ArrayAdapter, поскольку это другой класс. Ах, да, я установил макет для 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 голосов
/ 26 апреля 2011

Не звоните publishProgress() с onPostExecute(). Начнем с того, что прогресс не изменится до тех пор, пока не завершится onPostExecute(), так как * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1004 "/" ​​* "> * * * * * onProgressUpdate() * должен вызываться в главном потоке приложения.

Если вы все еще чувствуете, что все идет слишком медленно, я бы порекомендовал вам, возможно, использовать Traceview или простые операторы регистрации, чтобы точно определить, где проблема.

...