ProgressDialog в Android не отображается (неправильная обработка потоков?) - PullRequest
1 голос
/ 03 апреля 2012

Я пытаюсь реализовать радиоплеер (используя потоки shoutcast) для Android. Я хочу, чтобы во время загрузки радиопотока в проигрывателе пользовательский интерфейс отображал анимацию вращающегося колеса. При успешной загрузке (как только начинается воспроизведение песни) анимация исчезает.

Вот код, который я использую.

PlayStopStreamingButton.setOnClickListener(new OnClickListener() {

  @Override
  public void onClick(View v) {
    Thread initializer = new Thread(new Runnable() {

      @Override
      public void run() {
        Looper.myLooper();
        Looper.prepare();
        progressDialog = ProgressDialog.show(RadioPlayerActivity.this, "", "Selecting Radio Station",
            true);
        JukefoxApplication.getHandler().post(new Runnable() {

          @Override
          public void run() {
            radioPlayerEventListener.onPlayStopStreamingButtonClicked();
            progressDialog.dismiss();
          }
        });
      }
    });
    initializer.start();

  }
});

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

РЕДАКТИРОВАТЬ, это похоже на работу:

    PlayStopStreamingButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            progressDialog = ProgressDialog.show(RadioPlayerActivity.this, "", "Selecting Radio Station", true);

            Thread initializer = new Thread(new Runnable() {

                @Override
                public void run() {
                    radioPlayerEventListener.onPlayStopStreamingButtonClicked();
                    progressDialog.dismiss();
                }
            });
            initializer.start();

        }
    });

1 Ответ

0 голосов
/ 03 апреля 2012

Вам необходимо показать диалог прогресса в потоке пользовательского интерфейса, см. Ниже:

PlayStopStreamingButton.setOnClickListener(new OnClickListener() {

  @Override
  public void onClick(View v) {
    Thread initializer = new Thread(new Runnable() {

      @Override
      public void run() {
        Looper.myLooper();
        Looper.prepare();

        RadioPlayerActivity.this.runOnUiThread(new Runnable() { 
            @Override
            public void run() {
                progressDialog = ProgressDialog.show(RadioPlayerActivity.this,
                                     "", "Selecting Radio Station", true);
            }
        });

        JukefoxApplication.getHandler().post(new Runnable() {

          @Override
          public void run() {
            radioPlayerEventListener.onPlayStopStreamingButtonClicked();

            RadioPlayerActivity.this.runOnUiThread(new Runnable() { 
                 @Override
                 public void run() {
                            progressDialog.dismiss();
                 }
             });

      }
    });
    initializer.start();

  }
});
...