диалоговое окно прогресса Android - PullRequest
0 голосов
/ 01 ноября 2011

Я использую следующий код для отображения динамического диалога прогресса:

public void loading()
{
     final int WelcomeScreenDisplay=1000;
     progressDialog = new ProgressDialog(this);
     progressDialog.setCancelable(true);

     progressDialog.setMessage("Loading...");
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
   progressDialog.incrementProgressBy(10);
    progressDialog.show();



     Thread WelcomeThread=new Thread()
     {
        int wait=0;
        public void run()
        {
            try
            {
                super.run();
                while(wait<WelcomeScreenDisplay)
                {
                     sleep(100);
                          //  progressDialog.setProgress(0);
                     progressDialog.incrementProgressBy(10);    
                        wait+=100;

                }
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }

        }
     };
     WelcomeThread.start();
}

но есть такая проблема как: 1) при вызове этой функции по нажатию кнопки, строка загрузки отображается через 10-15 секунд и 2) Когда пользователь вводит имя пользователя и пароль и нажимает кнопку входа в систему, отображается индикатор выполнения и используется при переходе активности со страницы входа на другую, а затем при загрузке динамического содержимого 2-й страницы отображается пустой экран между обоими страницы за 1-2 минуты

Я хотел знать, какие изменения я внесу, чтобы этот пустой экран не появлялся ... и мое приложение переходит с одной страницы на другую, когда загрузка завершается.

Ответы [ 3 ]

2 голосов
/ 01 ноября 2011

Используйте AsyncTask всякий раз, когда вы выполняете такие операции.Вот пример

class eval extends AsyncTask<Void,Void,Void>
{

    ProgressDialog d;

    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
        d=ProgressDialog.show(MainScreen.this,"Please Wait","Populating  content...",true);
    }

    @Override
    protected void doInBackground(Void... params) 
    {
        //perform the required operation of fetching contents
        return null;
    }

    @Override
    protected void onPostExecute(Void result) 
    {
        super.onPostExecute(result);
        d.dismiss();
        // now call the required Activity

    }
}

Теперь в вашей программе для вызова этой задачи вам нужно сделать это

new eval().execute();

Убедитесь, что после этого у вас нет никаких операций в основном потоке пользовательского интерфейсазаявление

0 голосов
/ 01 ноября 2011

Вы должны получить свои данные в методе doInBackground (). Пока это происходит ... будет показан диалог прогресса. Вы вызываете другое действие в onPostExecute (). Да, последовательность выполнения - onPreExecute (), затем doInBackground () и, наконец, OnPostExecute (). Пожалуйста, помните, что метод doInBackground () выполняется не в потоке пользовательского интерфейса. Таким образом, вы не можете использовать тосты или диалоги оповещений здесь.

0 голосов
/ 01 ноября 2011

По моему мнению, AsyncTask будет лучшим способом для выполнения такой задачи, потому что в этом случае пользовательский интерфейс будет свободен для выполнения другой задачи, в противном случае пользовательский интерфейс будет зависать во время выполнения задачи, а также не беспокоиться об управлении потоками. Вы можете попробовать:

http://android -solution-sample.blogspot.com / 2011/11 / андроида-AsyncTask-example.html

http://developer.android.com/reference/android/os/AsyncTask.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...