Диалоговое окно хода выполнения не появится - Android - PullRequest
0 голосов
/ 24 июня 2011

Я хочу создать диалоговое окно Progress в моем приложении, чтобы использовать его при отправке некоторой информации.Но код, который я написал, не будет работать.Если метод send () выполняется, но диалоговое окно никогда не появляется, потому что оно очень быстро закрывается

Вот мой код:

    ProgressDialog myProgressDialog = ProgressDialog.show(Tents.this,
                                "Please wait...", "Sending...", true);
    send();
    myProgressDialog.dismiss();
    goFour();

Как сделать диалоговое окно Last немного дольше?

Ответы [ 5 ]

2 голосов
/ 24 июня 2011

Прежде всего - вы не должны выполнять send () в том же потоке, что и show () и dismiss (), потому что вы эффективно блокируете поток пользовательского интерфейса во время отправки.Диалог фактически никогда не будет отображаться - потому что для того, чтобы показать его после вызова show (), вам нужно вернуть элемент управления главному петлителю в потоке пользовательского интерфейса и просто завершить обработку любого события, которое вы обрабатываете.В противном случае поток пользовательского интерфейса никогда не сможет нарисовать ваше диалоговое окно.

Лучше всего начать выполнять send () в AsyncTask и вызывать dismiss () в onPostExecute () (см. http://developer.android.com/reference/android/os/AsyncTask.html дляполучить представление, как запустить асинхронную задачу).

2 голосов
/ 24 июня 2011

Возможно, вы получаете диалоговое окно прогресса, но его немедленно закрывают, так как ждать его нечего.

Я буду делать вид, что вы хотите это в OnCreate для моего примера:

 @Override
 public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);

     ProgressDialog pd = ProgressDialog.show(this, "Please wait...", "Sending...");
     new Thread(new Runnable(){
         public void run() {
             send();
             pd.dismiss();
         }
     }).start();

     gofour();
  }

РЕДАКТИРОВАТЬ: Если он все еще исчезает немедленно, убедитесь, что send(); делает что-то, что на самом деле занимает некоторое время.;)

0 голосов
/ 24 июня 2011

«Думаю, тогда мой настоящий вопрос заключается в том, как мне сделать так, чтобы он длился немного дольше?» Мой ответ будет ПОЧЕМУ ??? !!!

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

0 голосов
/ 24 июня 2011

Если ваше действие отправки завершается так быстро, что диалоговое окно не отображается должным образом, я мог бы предложить вместо этого использовать неопределенный индикатор выполнения в верхнем правом углу вашей активности с помощью requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS) и затем использовать setProgressBarIndeterminateVisibility(true/false).

0 голосов
/ 24 июня 2011

Поток пользовательского интерфейса используется для запуска send (), это не будет работать, и диалог прогресса не будет отображаться. Вызовите send в другом потоке или AsynTask doBackground и по завершении закройте диалоговое окно.

...