Индикатор выполнения по нажатию кнопки - PullRequest
0 голосов
/ 07 октября 2011

В моем приложении одним нажатием кнопки приложение выполняет некоторую обработку, отправляет некоторые данные по сети и затем останавливается. Поскольку это занимает некоторое время, я попытался вставить индикатор выполнения. Код для индикатора выполнения находится в начале прослушивания кнопки для кнопки. После выполнения штрих-кода происходит обработка и отправка данных по сети. Но индикатор выполнения вообще не виден. Нужно ли обязательно показывать индикатор выполнения в отдельной теме?

Это то, что я использовал, чтобы показать индикатор выполнения

final ProgressDialog pd=new ProgressDialog(this);
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.setMessage("Please wait..");
pd.setCancelable(true);
pd.setIndeterminate(true);
pd.show();

Ответы [ 2 ]

5 голосов
/ 07 октября 2011

используйте класс AsyncTask, который использовался для выполнения процесса в фоновом режиме, и вы также можете отобразить там свой индикатор выполнения

Вот простой фрагмент кода для AsyncTask

class BackgroundProcess extends AsyncTask<Void,Void,Void>{
   private ProgressDialog progress;
   public doInBackground(Void...arg){
        publishProgress();
        // do your processing here like sending data or downloading etc.
   }
   @Override
   protected void onProgressUpdate(Void... values) {
    super.onProgressUpdate(values);
    progress = ProgressDialog.show(YourActivity.this, "", "Wait...");       
   }
   @Override
   protected void onPostExecute(Void result) {
    super.onPostExecute(result);
    if(progress!=null)
        progress.dismiss();
    progress = null;
   }
}

, который теперь инициализируетсяи выполнить его в слушателе кнопки onclick следующим образом:

new BackgroundProcess().execute();

теперь progressdialog будет публиковаться и появляться на экране, а когда процесс завершится, из onPostExecute () просто закройте диалоговое окно прогресса

0 голосов
/ 07 октября 2011

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

РЕДАКТИРОВАТЬ: я переместил его в собственный поток, и он больше не работает, поэтому убедитесь, что он вызывается из потока пользовательского интерфейса.

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